0

除了 while loopCursors

如何使用 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)

但是有什么我可以做的,所以第二行也包括在内吗?

ps(除了将其保留为临时表)

4

1 回答 1

1

一般来说你不能。

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

对于您问题中的特定情况,您可以在一个声明中完成所有操作。

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 
于 2013-01-06T15:45:03.683 回答