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_NO
和 PrdNO
两个列。
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);
这个 MERGE
语句的工作原理如下:
- AS target 命名目标表并给别名T1
- 它首先通过
USING
子句定义了要插入的数据源(在这里是一个单行数据('1', '晓明')
;多行数据('1', '晓明'),('2', '黄晓'))。 ON
子句定义了如何匹配目标表和源数据。在这个例子中,我们只根据BOM_NO
列进行匹配。WHEN MATCHED THEN UPDATE
部分定义了当找到匹配的记录时应该执行的操作。在这里,我们更新PrdNO
列的值。WHEN NOT MATCHED THEN INSERT
部分定义了当没有找到匹配的记录时应该执行的操作。在这里,我们插入新的记录。
这样,当插入的 BOM_NO
已经存在于 Sheet1
表中时,相应的记录将被更新;如果不存在,将插入新记录。