Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Utilisation de CTE comme boucle de bloc ?

En général, vous ne pouvez pas.

Il n'est valable que pour l'instruction suivante. Vous pouvez définir une vue avec la même définition si vous souhaitez réutiliser la définition pour plusieurs déclarations ou matérialisez-le vous-même dans une table/variable de table temporaire pour réutiliser les résultats .

Pour le cas spécifique de votre question, vous pouvez cependant tout faire en une seule déclaration.

WITH cte
     AS (SELECT 1 AS n
         UNION ALL
         SELECT n + 1
         FROM   cte
         WHERE  n + 1 <= 10)
INSERT INTO tbl1
            (id)
OUTPUT      INSERTED.id
INTO tbl2(id)
SELECT n
FROM   cte