Vous devez d'abord mettre le CTE, puis combiner INSERT INTO avec votre instruction select. De plus, le mot-clé "AS" qui suit le nom du CTE n'est pas facultatif:
WITH tab AS (
bla bla
)
INSERT INTO dbo.prf_BatchItemAdditionalAPartyNos (
BatchID,
AccountNo,
APartyNo,
SourceRowID
)
SELECT * FROM tab
Veuillez noter que le code suppose que le CTE renverra exactement quatre champs et que ces champs correspondent dans l'ordre et le type avec ceux spécifiés dans l'instruction INSERT. Si ce n'est pas le cas, remplacez simplement "SELECT *" par une sélection spécifique des champs dont vous avez besoin.
Quant à votre question sur l'utilisation d'une fonction, je dirais "ça dépend". Si vous mettez les données dans un tableau uniquement pour des raisons de performances et que la vitesse est acceptable lors de son utilisation via une fonction, je considérerais la fonction comme une option. D'un autre côté, si vous avez besoin d'utiliser le résultat du CTE dans plusieurs requêtes différentes et que la vitesse est déjà un problème, j'opterais pour une table (régulière ou temporaire).
WITH common_table_expression (Transact-SQL)
Valentino Vranken
la source
Oui:
Notez qu'il s'agit de SQL Server, qui prend en charge plusieurs CTE:
Teradata n'autorise qu'un seul CTE et la syntaxe est à titre d'exemple.
la source