--Merge 文法是對錶進行插入,更新,刪除這三個操作的合并。--根據與源表聯結的結果,對目標表執行插入、更新或刪除操作。--MERGE 文法包括如下五個主要子句:-- MERGE 子句用於指定作為插入、更新或刪除操作目標的表或視圖。-- USING 子句用於指定要與目標聯結的資料來源。-- ON 子句用於指定決定目標與源的匹配位置的聯結條件。-- WHEN 子句用於根據ON 子句的結果指定要執行的操作。-- OUTPUT 子句針對更新、插入或刪除的目標對象中的每一行返回一行。 --樣本: USE tempdbGO--建立表AIF NOT OBJECT_ID('[A]') IS NULL DROP TABLE [A]GOCREATE TABLE A(ID INT,ACOL VARCHAR(10))GOINSERT A VALUES(1,N'A')INSERT A VALUES(2,N'B')INSERT A VALUES(3,N'C')INSERT A VALUES(6,N'X') --此記錄在B表中不存在,刪除GO--建立表BIF NOT OBJECT_ID('[B]') IS NULL DROP TABLE [B]GOCREATE TABLE B(ID INT,BCOL VARCHAR(10),XCOL VARCHAR(10))GOINSERT B VALUES(1,N'A',N'T') --1的ID與A表ID匹配且指定值與A表指定值對應相同,不變INSERT B VALUES(2,N'P',N'O') --2和的ID與A表ID匹配,指定值與A表指定值對應不同,更新INSERT B VALUES(3,N'P',N'N')INSERT B VALUES(4,N'L',N'Y') --4和的ID與A表ID匹配,指定值在A表中對應不存在,插入INSERT B VALUES(5,N'E',N'S') GO--開始合并兩個表:MERGE A --要處理的表USING B --參照的表ON A.ID=B.ID --關聯條件WHEN NOT MATCHED THEN INSERT VALUES(B.ID,B.BCOL) --如果要處理表沒有參照表上的記錄,則插入WHEN MATCHED THEN UPDATE SET A.ACOL=B.BCOL --如果記錄匹配,就更新目標表的匹配行WHEN NOT MATCHED BY SOURCE THEN DELETE --如果要處理表的記錄在參照表上不存在,則刪除OUTPUT $action, Inserted.*, Deleted.*; --相當於輸出以上語句的操作記錄 /*--result:$action ID ACOL ID ACOL---------- ----------- ---------- ----------- ----------INSERT 4 L NULL NULLINSERT 5 E NULL NULLUPDATE 1 A 1 AUPDATE 2 P 2 BUPDATE 3 P 3 CDELETE NULL NULL 6 X (6 行受影響)*/--看看A表更新成什麼樣:SELECT * FROM A/*ID ACOL----------- ----------1 A2 P3 P4 L5 E (5 行受影響)*/--再變換一個欄位MERGE A --要處理的表USING B --參照的表ON A.ID=B.ID --關聯條件WHEN NOT MATCHED THEN INSERT VALUES(B.ID,B.XCOL) WHEN MATCHED THEN UPDATE SET A.ACOL=B.XCOL WHEN NOT MATCHED BY SOURCE THEN DELETEOUTPUT $action, Inserted.*, Deleted.*; /*--result:$action ID ACOL ID ACOL---------- ----------- ---------- ----------- ----------UPDATE 1 T 1 AUPDATE 2 O 2 PUPDATE 3 N 3 PUPDATE 4 Y 4 LUPDATE 5 S 5 E (5 行受影響)*/--再看看現在的A表像什麼樣SELECT * FROM A/*ID ACOL----------- ----------1 T2 O3 N4 Y5 S (5 行受影響)*/