我有一个包含三个字段的源表
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
My target table is 'InsertDate' contains the following data.
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语句不能多次更新/删除目标表的同一行。 优化ON子句以确保目标行最多匹配一个源行, 或使用GROUP BY子句对源行进行分组。
有人可以帮助
答案 0 :(得分:0)
请查看此网站
http://www.sqlsafety.com/?p=665
MERGE语句尝试多次更新或删除同一行。当目标行与多个源行匹配时会发生这种情况。 MERGE语句不能多次更新/删除目标表的同一行。优化ON子句以确保目标行最多匹配一个源行,或使用GROUP BY子句对源行进行分组。“多次,我总是被迫通过查询逻辑运行以查看发生了什么。阅读信息对于发生的事情是相当自我解释的。目标表中的一行将在MERGE语句中多次受到影响,导致查询失败。
祝你好运