Sie müssen zuerst den CTE setzen und dann INSERT INTO mit Ihrer select-Anweisung kombinieren. Das Schlüsselwort "AS" nach dem Namen des CTE ist ebenfalls nicht optional:
WITH tab AS (
bla bla
)
INSERT INTO dbo.prf_BatchItemAdditionalAPartyNos (
BatchID,
AccountNo,
APartyNo,
SourceRowID
)
SELECT * FROM tab
Bitte beachten Sie, dass der Code davon ausgeht, dass der CTE genau vier Felder zurückgibt und dass diese Felder in Reihenfolge und Typ mit den in der INSERT-Anweisung angegebenen übereinstimmen. Ist dies nicht der Fall, ersetzen Sie einfach "SELECT *" durch eine bestimmte Auswahl der gewünschten Felder.
Was Ihre Frage zur Verwendung einer Funktion betrifft, würde ich sagen "es kommt darauf an". Wenn Sie die Daten nur aus Leistungsgründen in eine Tabelle einfügen und die Geschwindigkeit bei Verwendung über eine Funktion akzeptabel ist, würde ich die Funktion als Option betrachten. Wenn Sie andererseits das Ergebnis des CTE in mehreren verschiedenen Abfragen verwenden müssen und die Geschwindigkeit bereits ein Problem darstellt, würde ich mich für eine Tabelle entscheiden (entweder regulär oder temporär).
WITH common_table_expression (Transact-SQL)
Ja:
Beachten Sie, dass dies für SQL Server gilt, der mehrere CTEs unterstützt:
Teradata erlaubt nur einen CTE und die Syntax ist als Beispiel.
quelle