Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Usando CTE como um loop de bloco?


Em geral não pode.

Só é válido para a próxima afirmação. Você pode definir uma visualização com a mesma definição se quiser reutilizar a definição para várias instruções ou materialize você mesmo em uma variável de tabela/tabela temporária para reutilizar os resultados .

Para o caso específico em sua pergunta, você pode fazer tudo em uma declaração.
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