我有一个包含三个字段的源表
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‘,它包含以下数据。
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子句对源行进行分组。
发布于 2014-08-20 22:40:05
请查看此站点
http://www.sqlsafety.com/?p=665
MERGE语句多次尝试更新或删除同一行。当目标行与多个源行匹配时,就会发生这种情况。MERGE语句不能多次更新/删除目标表的同一行。优化ON子句以确保目标行最多与一个源行匹配,或使用GROUP BY子句对源行进行分组。“几次,并且我总是被迫返回查询逻辑,以查看发生了什么。阅读消息时,所发生的事情是不言而喻的。目标表中的某一行将多次受到MERGE语句的影响,这会导致查询失败。
诚挚的问候
https://stackoverflow.com/questions/16356370
复制相似问题