Сначала нужно поставить 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)