Vous avez besoin de mettre la CTE d'abord et puis de combiner les INSÉRER DANS votre instruction select. Aussi, le "COMME" mot-clé à la suite de la CTE du nom n'est pas une option:
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 CCE sera de retour exactement quatre champs et que ces champs sont les critères dans l'ordre et le type avec celles qui sont spécifiées dans l'instruction INSERT.
Si ce n'est pas le cas, il suffit de remplacer le "SELECT *" avec un spécifique, sélectionnez les champs que vous avez besoin.
Quant à votre question sur l'utilisation d'une fonction, je dirais que "ça dépend". Si vous de mettre les données dans une table juste à cause de raisons de performances, et la vitesse est acceptable lors de son utilisation au travers d'une fonction, alors je voudrais examiner la fonction d'être une option.
D'autre part, si vous avez besoin d'utiliser le résultat de la CTE dans plusieurs requêtes différentes, et que la vitesse est déjà un problème, j'irais pour un tableau (que ce soit régulière ou temp).
AVEC common_table_expression (Transact-SQL)