我正在使用SQL Server 2012.我连续定义了三个CTE,如下所示:
;WITH X_CTE (A, B, C, D)
AS (
...
)
,
Y_CTE (A, B, C, D)
AS (
...
)
,
Z_CTE (A, B, C, D)
AS (
...
)
Run Code Online (Sandbox Code Playgroud)
然后,我将这些CTE插入到一个表中,该表的模式已定义并与CTE的模式匹配
INSERT INTO MyTable SELECT * FROM X_CTE
INSERT INTO MyTable SELECT * FROM Y_CTE
INSERT INTO MyTable SELECT * FROM Z_CTE
Run Code Online (Sandbox Code Playgroud)
我在三个INSERT INTO语句中得到CTE的"无效对象名称"错误.事实上,我在SELECT语句中得到了同样的错误:
SELECT * FROM X_CTE
SELECT * FROM Y_CTE
SELECT * FROM Z_CTE
Run Code Online (Sandbox Code Playgroud)
你能指出这里有什么问题吗?
谢谢
-Rohan.
CTE仅针对其后的一个语句定义.三个INSERT陈述 - 好 - 多于一个陈述.
由于所有插入都在同一个表中,因此您可以UNION ALL将所有行收集到一个INSERT语句中:
INSERT INTO MyTable
SELECT * FROM X_CTE
UNION ALL
SELECT * FROM Y_CTE
UNION ALL
SELECT * FROM Z_CTE
Run Code Online (Sandbox Code Playgroud)
但我还要更改上面的内容以使用显式列列表 - 如果以后添加更多列,则不希望此查询中断MyTable:
INSERT INTO MyTable (A,B,C,D)
SELECT * FROM X_CTE
UNION ALL
SELECT * FROM Y_CTE
UNION ALL
SELECT * FROM Z_CTE
Run Code Online (Sandbox Code Playgroud)
仅针对一个查询定义CTE。您需要为三个selects 重复它们insert:
with X_CTE . . .
INSERT INTO MyTable SELECT * FROM X_CTE;
with X_CTE . . .
INSERT INTO MyTable SELECT * FROM Y_CTE;
with X_CTE . . .
INSERT INTO MyTable SELECT * FROM Z_CTE;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7734 次 |
| 最近记录: |