合併插入更新刪除

MERGE INTO targetTable

USING sourceTable 
ON (targetTable.PKID = sourceTable.PKID)

WHEN MATCHED AND (targetTable.PKID > 100) THEN
    DELETE

WHEN MATCHED AND (targetTable.PKID <= 100) THEN 
    UPDATE SET 
        targetTable.ColumnA = sourceTable.ColumnA, 
        targetTable.ColumnB = sourceTable.ColumnB

WHEN NOT MATCHED THEN
    INSERT (ColumnA, ColumnB) VALUES (sourceTable.ColumnA, sourceTable.ColumnB);

WHEN NOT MATCHED BY SOURCE THEN
    DELETE
; --< Required

描述:

  • MERGE INTO targetTable - 要修改的表

  • USING sourceTable - 資料來源(可以是表或檢視或表值函式)

  • ON ... - targetTablesourceTable 之間的連線條件。

  • WHEN MATCHED - 找到匹配項時要採取的措施

    • AND (targetTable.PKID > 100) - 為採取行動必須滿足的附加條件
  • THEN DELETE - 刪除 targetTable 的匹配記錄

  • THEN UPDATE - 更新 SET .... 指定的匹配記錄列

  • WHEN NOT MATCHED - 在 targetTable找不到匹配時要採取的行動 ****

  • WHEN NOT MATCHED BY SOURCE - 在 sourceTable找不到匹配時要採取的行動 ****

評論:

如果不需要特定的操作,則省略條件,例如刪除 WHEN NOT MATCHED THEN INSERT 將阻止插入記錄

合併語句需要終止分號。

限制:

  • WHEN MATCHED 不允許採取行動
  • UPDATE 動作只能更新一行。這意味著連線條件必須產生唯一匹配。