Сочетание INSERT INTO и WITH / CTE

Более простой способ - просто сгенерировать SVG в строку, создать HTML-элемент оболочки и вставить строку svg в элемент HTML с помощью $("#wrapperElement").html(svgString). Это прекрасно работает в Chrome и Firefox.

146
задан Kirk Broadhurst 30 September 2015 в 17:56
поделиться

2 ответа

Вам нужно сначала поместить CTE, а затем объединить INSERT INTO с оператором select. Кроме того, ключевое слово "AS" после имени CTE не является необязательным:

WITH tab AS (
    bla bla
)
INSERT INTO dbo.prf_BatchItemAdditionalAPartyNos (
BatchID,
AccountNo,
APartyNo,
SourceRowID
)  
SELECT * FROM tab

Обратите внимание, что код предполагает, что CTE вернет ровно четыре поля и что эти поля совпадают по порядку и типу с полями, указанными в операторе INSERT. Если это не так, просто замените "SELECT *" на конкретную выборку нужных вам полей.

Что касается вашего вопроса об использовании функции, я бы сказал: "Это зависит от ситуации". Если вы помещаете данные в таблицу только из соображений производительности, и скорость приемлема при использовании их через функцию, то я бы рассматривал функцию как вариант. С другой стороны, если вам нужно использовать результат CTE в нескольких различных запросах, и скорость уже является проблемой, я бы выбрал таблицу (либо обычную, либо временную).

WITH common_table_expression (Transact-SQL)

254
ответ дан 23 November 2019 в 22:30
поделиться

Ага:

WITH tab (
  bla bla
)

INSERT INTO dbo.prf_BatchItemAdditionalAPartyNos (  BatchID,                                                        AccountNo,
APartyNo,
SourceRowID)    

SELECT * FROM tab

Обратите внимание, что это для SQL Server, который поддерживает несколько CTE:

WITH x AS (), y AS () INSERT INTO z (a, b, c) SELECT a, b, c FROM y

Teradata допускает только один CTE, а синтаксис как в вашем примере.

16
ответ дан 23 November 2019 в 22:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: