除while loop
和Cursors
如何使用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.S。 (除了将其保留为临时表)
答案 0 :(得分:1)
一般情况下你不能。
它仅对下一个声明有效。如果要将定义重用于多个语句,或者将其实现为临时表/表变量,以重用结果,则可以定义具有相同定义的视图。 / 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