插入...合併...選擇:利用MERGE 檢索產生的識別
在SQL Server 中,INSERT... SELECT語句允許將資料從另一個表或查詢插入到目標表中。然而,從多個來源提取值時它有其限制。有使用 MERGE 語句的解決方案,該語句可以檢索插入的資料和來源資料。
為了說明這一點,請考慮以下情況:
INSERT INTO Table3 (Column2, Column3、Column4、Column5)<br>SELECT null, 110, Table1.ID, Table2 .Column2<br>FROM Table1<pre class="brush:php;toolbar:false"> JOIN Table1Table2Link on Table1.ID=Table1Table2Link.Column1 JOIN Table2 on Table1Table2Link.Column2=Table2.ID
需要從 Table3 和 Table2.ID 擷取產生的識別 (Inserted.ID) 並將它們插入到臨時表或變數中。雖然 OUTPUT 子句通常用於此目的,但它無法從不同的表中提取資料。
解決方案在於使用 MERGE 來填入表,而不是 INSERT...SELECT。這允許存取輸出子句中插入的值和來源值:
MERGE INTO Table3 USING<br>(<pre class="brush:php;toolbar:false">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 --總是不匹配
當不匹配時
插入(Column2、Column3、Column4、 Column5)
值(s.col2, s.col3, s.col4, s.col5)
輸出Inserted.ID, s.col6
INTO @MyTableVar (insertedId, Table2Id);
透過使用MERGE,OUTPUT子句可以同時取得插入的識別(Inserted.ID)和 Table2 中的值(Table2.ID),並將它們插入到 @MyTableVar 中以供進一步使用正在處理。
以上是MERGE 語句如何檢索 SQL Server INSERT 作業中產生的識別碼和來源資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!