SQL server Merge into MERGE 语句试图多次更新或删除同一行。目标行与多个源行匹配时会出现这种情况。MERGE 语句无法多次更新/删除目标表的同一行。请简化 ON 子句,
2018-12-10 10:18:20
SQLserver Merge into 的用法 在匹配Using 源表时,有时候会报异常消息 8672,级别 16,状态 1,第 1 行 MERGE 语句试图多次更新或删除同一行。目标行与多个源行匹配时会出现这种情况。MERGE 语句无法多次更新/删除目标表的同一行。请简化 ON 子句,针对这问题的解决办法一般是确保源表的on字段是唯一的。因为我们可以用distinct关键字,保证源表的On 字段的唯一性。
merge into HR_LeaveData as T using (select distinct 44444 as UserID,''as UserName,'' as DepartMent from HR_LeaveData) as S on T.UserID=S.UserID
when matched then update set T.AnnualVacation=T.AnnualVacation+(2),T.BreakOffDay=T.BreakOffDay+(3.2)
when not matched then insert
values(S.UserID,S.UserName,S.DepartMent,12,11);
Merge
关键字是一个神奇的DML关键字。它在
SQL
Server
2008被引入,它能将Insert,Update,Delete简单的并为一句。MSDN对于
Merge
的解释非常的短小精悍:”根据与源
表
联接的结果,对
目标
表
执
行
插入、
更新
或
删除
操作。例如,根据在另一个
表
中找到的差异在一个
表
中插入、
更新
或
删除
行
,可以对两个
表
进
行
同步。”,通过这个描述,我们可以看出
Merge
是关于对于两个
表
之间的数据进
行
操作的。
可以想象出,需要使用
Merge
的场景比如:
数据转换...
MERGE
的定义
MERGE
关键字是一个神奇的DML关键字,它能将INSERT,UPDATE,DELETE等操作并为一句,根据与源
表
联接的结果,对
目标
表
执
行
插入、
更新
或
删除
操作。
MERGE
的语法
MERGE
INTO target_tableUSING source_tableON conditionWHEN MATCHED THEN operationWHEN NOT MATCHED THEN op...
SQL
Server
2008将包含用于合并两个
行
集(rowset)数据的新句法。根据一个源数据
表
对另一个数据
表
进
行
确定性的插入、
更新
和
删除
这样复杂的操作,运用新的
MERGE
语句
,开发者用一条命令就可以完成。对两个
表
进
行
信息同步时,有三步操作要进
行
。1、首先要处理任何需要插入
目标
数据
表
的新
行
。 ...
OK,就像标题呈现的一样,
SQL
Server
2008中的
MERGE
语句
能做很多事情,它的功能是根据源
表
对
目标
表
执
行
插入、
更新
或
删除
操作。最典型的应用就是进
行
两个
表
的同步。下面通过一个简单示例来演示
MERGE
语句
的使用方法,假设数据库中有两个
表
Product及ProductNew,我们的任务是将Product的数据同步到ProductNew(当然同步可能是每天通过Job来自动完成的,在此我们只关注
MERGE
的使用)。以下
SQL
创建示例
表
:--源
表
CREATE TABLE Product ( Pr
简单记录一下,
sql
server
中的
merge
相当于 my
sql
中的 Insert into on duplicatedtalk is cheap ,show me the money, 哦 ,不对 code:create table
merge
test(
id uniqueidentifier primary key,
name varchar(50)
) --insert into m
在项目中常常会遇到一个需要对一个
表
根据条件不同而进
行
不同的操作,比如说ERP对于员工的管理——录入员工信息时,对于新入职的员工就新增一条记录,在职的老员工电话换号了就
更新
;已经离职的就
删除
等等。其实质就是条件分支,当然我们可以用if else if else 这样的
语句
来实现,但还有一个更加强大的
Merge
你应该考虑!