Sql-Server

SQL Server 合併任務

  • December 2, 2015

目標表是否需要與源表示意性相同?具體來說:1)它們是否需要具有相同數量的列並且列類型必須相同?,2)列名稱是否也需要相同?

一般的 MERGE 語法如下:

MERGE INTO <target table> AS TGT
USING <SOURCE TABLE> AS SRC
ON <merge predicate>
WHEN MATCHED [AND <predicate>]
THEN <action> -- one with UPDATE one with DELETE
WHEN NOT MATCHED [BY TARGET] [AND <predicate>] 
THEN INSERT... –- if indicated, action must be INSERT
WHEN NOT MATCHED BY SOURCE [AND <predicate>] 
THEN <action>; -- one with UPDATE one with DELETE

不,它們不需要具有相同的名稱/數量/類型的列(儘管對於您在“連接”中比較的列,即 on-predicate,它們需要兼容才能進行比較)。

根據您的範例語法創建的 MERGE 語句將指定要匹配的欄位(合併謂詞)或插入/更新/刪除。如果您想在 CustomerName = Customer 上進行匹配,或者將 OrderDate 插入到 Date 欄位中,那很好。

可以將其想像為在單個語句中執行基於聯接的 INSERT 和基於聯接的 UPDATE。有些人將此過程稱為“upsert”!

引用自:https://dba.stackexchange.com/questions/122684