可以使用select into with multi cte吗?例如,在下面的代码中,第一个cte cte_table的结果被插入到dbo.table1中,然后定义了另一个cte。这有可能吗?
WITH cte_table
AS
(
SELECT *
FROM dbo.table
)
INSERT INTO dbo.table1
SELECT *
FROM [cte_table]
, cte_table2
AS
(
SELECT *
FROM dbo.table2
)
答案 0 :(得分:4)
连接所有CTE,然后选择进入。
WITH First_CTE AS
(
SELECT
Columns
FROM
Schema.Table
WHERE
Conditions
),
Second_CTE AS
(
SELECT
Columns
FROM
Schema.OtherTable
WHERE
Conditions
)
SELECT
Variables
INTO
NewTable
FROM
First_CTE A
JOIN
Second_CTE B
ON
A.MatchVar = B.MatchVar
如果您以后不需要CTE但是更喜欢比ETL的子查询更简单的方法,这可能会有所帮助。
答案 1 :(得分:3)
不,你不能:你得到一个错误,因为INTO
是不被允许的,并且正如其他人所指出的那样,它是有意义的,因为CTE
旨在是一个可重复的(从而静态)参考。
我记得在某个地方读取/大部分是语法糖,只要在执行sql时cte被解析为派生表。
答案 2 :(得分:3)
如果您的案例是记录集的Re-usability
,那么使用Temp Table或Table变量。
e.g。
Select * Into #temp1 From dbo.table
INSERT INTO dbo.table1
SELECT * FROM #temp1
SELECT * FROM #temp1 ..... and do some other re-usability operations.
链接的Cte工作(仅作为示例)
;With Cte1 As ( Select * from table1)
,Cte2 As (Select * from table2)
select c1.*,c2.*
from cte1 c1, cte2 c2
希望您了解何时使用什么以及如何使用。
答案 3 :(得分:0)
否您无法在CTE中使用select into。它实际上也没有任何意义。