可以将 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
)
可以将 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
)
将所有 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 的子查询更简单的方法,这会很有帮助。
不,你不能:你会得到一个INTO
不允许的错误,而且,正如其他人所指出的,这是有道理的,因为它CTE
旨在成为可重复的(因此是静态的)引用。
而且我记得在某处读过大部分是/曾经是语法糖的地方,只要在执行 sql 时将 cte 解析为派生表。
如果您的案例属于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
希望您了解何时使用什么以及如何使用。
不,您不能在 CTE 中使用 select into。它实际上也没有任何意义。