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_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)
WHEN NOT MATCHED BY SOURCE THEN
DELETE;
这个 MERGE
语句的工作原理如下:
- AS target 命名目标表并给别名T1
- 它首先通过
USING
子句定义了要插入的数据源(在这里是一个单行数据('1', '晓明')
;多行数据('1', '晓明'),('2', '黄晓'))。 ON
子句定义了如何匹配目标表和源数据。在这个例子中,我们只根据BOM_NO
列进行匹配。WHEN MATCHED THEN UPDATE
部分定义了当找到匹配的记录时应该执行的操作。在这里,我们更新PrdNO
列的值。WHEN NOT MATCHED THEN INSERT
部分定义了当没有找到匹配的记录时应该执行的操作。在这里,我们插入新的记录。WHEN NOT MATCHED BY SOURCE THEN
部分定义了当没有找到匹配的源记录时应该执行的操作。在这里,我们删除目标表内记录。
这样,当插入的 BOM_NO
已经存在于 Sheet1
表中时,相应的记录将被更新;如果不存在,将插入新记录。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)