0

可以将 select into 与多个 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

4 回答 4

7

将所有 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 的子查询更简单的方法,这会很有帮助。

于 2013-08-22T21:35:23.307 回答
3

不,你不能:你会得到一个INTO不允许的错误,而且,正如其他人所指出的,这是有道理的,因为它CTE旨在成为可重复的(因此是静态的)引用。

而且我记得在某处读过大部分是/曾经是语法糖的地方,只要在执行 sql 时将 cte 解析为派生表。

于 2012-09-21T09:02:30.110 回答
3

如果您的案例属于Re-usability记录集,则在这种情况下使用临时表或表变量。

例如

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

希望您了解何时使用什么以及如何使用。

于 2012-09-21T09:44:09.577 回答
0

不,您不能在 CTE 中使用 select into。它实际上也没有任何意义。

于 2012-09-21T09:02:31.730 回答