首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MERGE语句多次尝试更新或删除同一行

问MERGE语句多次尝试更新或删除同一行
EN

Stack Overflow用户
提问于 2013-05-03 18:05:01
回答 1查看 3.3K关注 0票数 0

我有一个包含三个字段的源表

代码语言:javascript
复制
Declare @tmptvp table
(
ID int,
StartDate Datetime,
EndDate Datetime
)


Insert @tmptvp values(1,'2013-04-28','2013-04-30')
Insert @tmptvp values(2,'2013-05-01','2013-06-30')

select * from @tmptvp

我的目标表是'InsertDate‘,它包含以下数据。

代码语言:javascript
复制
Insert InsertDate values(1,'2013-04-28','2013-06-30')

while merging
MERGE (@tmptvp)  as TGT
USING 
(select ID,StartDate,EndDate FROM  @tmptvp)  AS SRC
ON
(TGT.StartDate = SRC.StartDate OR TGT.EndDate = SRC.EndDate)  

WHEN MATCHED THEN
UPDATE SET TGT.StartDate = CASE WHEN SRC.StartDate < TGT.StartDate  THEN SRC.StartDate ELSE TGT.StartDate END,
TGT.EndDate   = CASE WHEN SRC.EndDate > TGT.EndDate THEN  SRC.EndDate ELSE TGT.EndDate  END, 


 WHEN NOT MATCHED THEN
 INSERT (ID,StartDate,EndDate)  
 VALUES
(SRC.ID,SRC.StartDate,SRC.EndDate);

上述merge语句引发MERGE语句多次尝试更新或删除同一行。当目标行与多个源行匹配时,就会发生这种情况。MERGE语句不能多次更新/删除目标表的同一行。优化ON子句以确保目标行最多与一个源行匹配,或者使用GROUP BY子句对源行进行分组。

EN

回答 1

Stack Overflow用户

发布于 2014-08-20 22:40:05

请查看此站点

http://www.sqlsafety.com/?p=665

MERGE语句多次尝试更新或删除同一行。当目标行与多个源行匹配时,就会发生这种情况。MERGE语句不能多次更新/删除目标表的同一行。优化ON子句以确保目标行最多与一个源行匹配,或使用GROUP BY子句对源行进行分组。“几次,并且我总是被迫返回查询逻辑,以查看发生了什么。阅读消息时,所发生的事情是不言而喻的。目标表中的某一行将多次受到MERGE语句的影响,这会导致查询失败。

诚挚的问候

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16356370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档