sql >> Databasteknik >  >> RDS >> Sqlserver

Använder du CTE som en blockloop?

I allmänhet kan du inte.

Det gäller endast för nästa påstående. Du kan definiera en vy med samma definition om du vill återanvända definitionen för flera satser eller materialisera den till en temporär tabell/tabellvariabel själv för att återanvända resultaten .

För det specifika fallet i din fråga kan du dock göra allt i ett påstående.

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 



  1. hur man lägger till ett datum (DateTime.now) till en mySql-databas i C#

  2. Hur man felsöker SQL Server T-SQL i Visual Studio 2012

  3. php visa röd, bärnsten eller grön färg div beroende på hur många dagar kvar?

  4. SQL Server 2008 jämför två tabeller i samma databas och hämta kolumnen ändras