首頁 >資料庫 >mysql教程 >如何在 SQL Server INSERT 作業期間使用 MERGE 從多個表中擷取資料?

如何在 SQL Server INSERT 作業期間使用 MERGE 從多個表中擷取資料?

Patricia Arquette
Patricia Arquette原創
2025-01-03 19:08:40965瀏覽

How Can I Capture Data from Multiple Tables During an SQL Server INSERT Operation Using MERGE?

在SQL Server 插入...合併...選擇

在SQL Server 中,INSERT INTO...SELECT 語句允許您將SELECT 查詢中的資料插入目標表中。但是,當 SELECT 查詢涉及多個資料表的資料時,OUTPUT 子句無法在不同表中擷取資料。

引入 MERGE

要解決此問題,可以考慮使用合併語句。 MERGE 將 INSERT、UPDATE 和 DELETE 運算組合到單一語句中。它允許您根據特定條件有條件地對目標行執行操作。

使用 MERGE 輸出資料

要從插入表和來源表中擷取資料,您可以在 MERGE 語句中使用 OUTPUT 子句。以下範例示範如何從多個資料表插入資料並輸出Inserted.ID 和Table2.ID:

MERGE INTO Table3 USING
(
    SELECT null AS col2,
           110 AS col3,
           Table1.ID AS col4,
           Table2.Column2 AS col5,
           Table2.ID AS col6
    FROM Table1
    JOIN Table1Table2Link ON Table1.ID = Table1Table2Link.Column1
    JOIN Table2 ON Table1Table2Link.Column2 = Table2.ID
) AS s ON 1 = 0 -- Always not matched
WHEN NOT MATCHED THEN
    INSERT (Column2, Column3, Column4, Column5)
    VALUES (s.col2, s.col3, s.col4, s.col5)
OUTPUT Inserted.ID, s.col6
INTO @MyTableVar (insertedId, Table2Id);

在此MERGE 語句中:

  • USING 子句定義來自SELECT查詢的來源資料。
  • ON 子句指定 MERGE 運算將永遠是 NOT MATCHED 條件(即,從不更新或刪除)。
  • WHEN NOT MATCHED 子句定義將來源表中的資料插入 Table3 的 INSERT 作業。
  • OUTPUT 子句捕獲來自的 Inserted.ID來源表 (s.col6) 中的目標表 (Table3) 和 Table2.ID 並將它們儲存在表變數中@MyTableVar。

以上是如何在 SQL Server INSERT 作業期間使用 MERGE 從多個表中擷取資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn