sql >> Base de Datos >  >> RDS >> Sqlserver

¿Usando CTE como un bucle de bloque?

En general no se puede.

Sólo es válido para la declaración siguiente. Podría definir una vista con la misma definición si desea reutilizar la definición para declaraciones múltiples o materialícelo en una tabla temporal/variable de tabla usted mismo para reutilizar los resultados .

Sin embargo, para el caso específico de su pregunta, podría hacerlo todo en una declaración.

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