簡體   English   中英

在 INSERT 語句中使用 WITH 子句

[英]Using the WITH clause in an INSERT statement

我想知道這是否可能。 我有一個現有查詢,它使用WITH子句將一些聚合數據應用於SELECT查詢,如下所示:(大量簡化)

;WITH alias (y,z)
AS
(
    SELECT y,z FROM tableb
)
SELECT y, z FROM alias

我現在想將此查詢的結果INSERT到另一個表中。

我嘗試了以下方法:

INSERT INTO tablea(a,b)
;WITH alias (y,z)
AS
(
    SELECT y,z FROM tableb
)
SELECT y, z FROM alias

但我得到了錯誤:

';' 附近的語法不正確。

因此,我嘗試不使用分號,但出現錯誤:

關鍵字“WITH”附近的語法不正確。

關鍵字“with”附近的語法不正確。 如果此語句是公用表表達式或 xmlnamespaces 子句,則前面的語句必須以分號結束。

我正在嘗試用不同的一些不同的語法來做可能的事情嗎?

您需要在CTE之后立即放置INSERT INTO 所以代碼將是:

;WITH alias (y,z)
AS
(
    SELECT y,z FROM tableb
)
INSERT INTO tablea(a,b)
SELECT y, z 
FROM alias

請參閱SQL Fiddle with Demo

不使用CTE另一種方法是將其包裝在子查詢中,

INSERT INTO tablea(a,b)
SELECT y, z 
FROM 
(
    SELECT y,z FROM tableb
) alias

分號用於終止語句。 因此,當您使用; WITH時,終止前一個語句。 但是,這不是你在這里得到錯誤的原因。 這里的問題是你的INSERT INTO語句,它正在尋找VALUES或SELECT語法。

INSERT INTO語句可以通過兩種方式使用 - 通過顯式提供VALUES或使用SELECT語句提供結果集。

在我的情況下,建議的答案不適用,我認為這是 SQL 服務器版本的米,在我的情況下是 SQL Server 2016。或者,您可以通過以下代碼片段使用臨時表:

;WITH alias (y,z)
AS (SELECT y,z FROM tableb)
SELECT Y,Z
INTO #TEMP_TABLE
FROM alias

Z

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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