目标表是否需要与源表示意性地相同?具体来说: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 字段中,那会很好。
将其想象成您在单个语句中执行基于连接的插入和基于连接的更新。有些人将此过程称为“upsert”!