Sql server 使用CTE作为块循环?
除了while循环和游标 如何使用CTE表进行n块操作 例如: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
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