簡體   English   中英

“公用表表達式(CTE)”的“無效對象名稱”錯誤,即使已定義CTE也是如此

[英]'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僅針對一個查詢進行定義。 您需要為三個selectinsert 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM