[英]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
不使用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.