Sql-Server
SQL Server 合併任務
目標表是否需要與源表示意性相同?具體來說: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”!