[英]'Invalid object name' error for Common Table Expression (CTE) even though CTE has been defined
我正在使用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 (
...
)
然后,我將這些CTE插入到一個表中,該表的模式已定義並與CTE的模式匹配
INSERT INTO MyTable SELECT * FROM X_CTE
INSERT INTO MyTable SELECT * FROM Y_CTE
INSERT INTO MyTable SELECT * FROM Z_CTE
我在三個INSERT INTO
語句中收到CTE的“無效對象名稱”錯誤。 實際上,我在SELECT
語句中遇到了同樣的錯誤:
SELECT * FROM X_CTE
SELECT * FROM Y_CTE
SELECT * FROM Z_CTE
你能指出這里有什么問題嗎?
謝謝
-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
但我還要更改上面的內容以使用顯式列列表 - 如果以后向MyTable
添加更多列,則不希望此查詢中斷:
INSERT INTO MyTable (A,B,C,D)
SELECT * FROM X_CTE
UNION ALL
SELECT * FROM Y_CTE
UNION ALL
SELECT * FROM Z_CTE
CTE僅針對一個查詢進行定義。 您需要為三個select
或insert
s重復它們:
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.