Sql server 使用CTE作为块循环?

Sql server 使用CTE作为块循环?,sql-server,sql-server-2008,common-table-expression,Sql Server,Sql Server 2008,Common Table Expression,除了while循环和游标 如何使用CTE表进行n块操作 例如: WITH cte AS ( SELECT 1 AS n UNION ALL SELECT n+1 FROM cte WHERE n+1<= 10 ) INSERT INTO tbl1 (id) select n from ct

除了while循环和游标

如何使用CTE表进行n块操作

例如:

WITH cte AS (
                SELECT 1 AS n
                UNION ALL 
                SELECT n+1
                FROM   cte
                WHERE   n+1<= 10
            )

    INSERT INTO tbl1 (id) select n from cte   --till here it's all ok.
    INSERT INTO tbl2 (id) select n from cte --{notice tbl2} .fail here ( cause cte usages must come right after the decleration)
但是有什么我可以做的吗?第二行也包括在内

p、 除了把它作为临时表保存外,一般来说你不能

它仅对下一个语句有效。如果要对多个语句重用定义,或者自己将其具体化为临时表/表变量以重用结果,则可以使用相同的定义定义视图

不过,对于你问题中的具体情况,你可以在一个陈述中完成这一切

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