SQL server MERGE 语句

SQL server MERGE 语句

SQL server 的MERGE语句 等效于MySQL的on duplicate key update方法.

具体来说,MERGE语句会检查原数据表记录和目标表记录。如果记录在原数据表和目标表中均存在,则目标表中的记录将被原数据表中的记录所更新(执行Update操作);如果目标表中不存在的某(些)记录,在原数据表中存在,则原数据表的这(些)记录将被插入到目标表中(执行Insert操作)。

在Oracle 10g之前,merge语句支持匹配更新和不匹配插入两种简单的用法,在10g中Oracle对merge语句做了增强,增加了条件选项和DELETE操作。

MERGE 语句应用.在 SQL Server 中,如果你想在插入数据时处理重复键的情况,你可以使用 MERGE 语句。以下是一个示例,说明如何使用 MERGE 语句来处理重复键:

假设我们有一个名为 Sheet1 的表,其中包含 BOM_NOPrdNO 两个列。

MERGE INTO Sheet1 AS target  
USING (VALUES ('1', '晓明')) AS source (BOM_NO, PrdNO)  
ON (target.BOM_NO = source.BOM_NO) -- 这里可以添加其他条件来匹配键  
WHEN MATCHED THEN  
    UPDATE SET target.PrdNO = source.PrdNO  
WHEN NOT MATCHED THEN  
    INSERT (BOM_NO, PrdNO) VALUES (source.BOM_NO, source.PrdNO)      
WHEN NOT MATCHED BY SOURCE THEN
    DELETE;

这个 MERGE 语句的工作原理如下:

  1. AS target 命名目标表并给别名T1
  2. 它首先通过 USING 子句定义了要插入的数据源(在这里是一个单行数据 ('1', '晓明');多行数据('1', '晓明'),('2', '黄晓'))。
  3. ON 子句定义了如何匹配目标表和源数据。在这个例子中,我们只根据 BOM_NO 列进行匹配。
  4. WHEN MATCHED THEN UPDATE 部分定义了当找到匹配的记录时应该执行的操作。在这里,我们更新 PrdNO 列的值。
  5. WHEN NOT MATCHED THEN INSERT 部分定义了当没有找到匹配的记录时应该执行的操作。在这里,我们插入新的记录。
  6. WHEN NOT MATCHED BY SOURCE THEN 部分定义了当没有找到匹配的源记录时应该执行的操作。在这里,我们删除目标表内记录。

这样,当插入的 BOM_NO 已经存在于 Sheet1 表中时,相应的记录将被更新;如果不存在,将插入新记录。

posted @ 2024-01-16 14:56  谢十二♡Lgy  阅读(118)  评论(0编辑  收藏  举报