Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Verwenden von CTE als Blockschleife?

Generell kannst du das nicht.

Sie gilt nur für die nächste Anweisung. Sie könnten eine Ansicht mit derselben Definition definieren, wenn Sie die Definition wiederverwenden möchten für mehrere Anweisungen oder materialisieren Sie es selbst in einer temporären Tabelle/Tabellenvariablen, um die Ergebnisse wiederzuverwenden .

Für den speziellen Fall in Ihrer Frage könnten Sie jedoch alles in einer Anweisung tun.

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