可以使用select into with multi cte

时间:2012-09-21 08:56:53

标签: sql sql-server tsql sql-server-2008-r2

可以使用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
)

4 个答案:

答案 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。它实际上也没有任何意义。