如何解决这个特定于SQL的合并问题
如何解决错误: MERGE语句多次尝试更新或删除同一行。当目标行与多个源行匹配时,会发生这种情况。MERGE语句不能多次更新/删除目标表的同一行。优化ON子句以确保目标行最多匹配一个源行,或使用GROUP BY子句对源行进行分组如何解决这个特定于SQL的合并问题,sql,sql-server,tsql,Sql,Sql Server,Tsql,如何解决错误: MERGE语句多次尝试更新或删除同一行。当目标行与多个源行匹配时,会发生这种情况。MERGE语句不能多次更新/删除目标表的同一行。优化ON子句以确保目标行最多匹配一个源行,或使用GROUP BY子句对源行进行分组 正如错误消息和注释中所解释的,源表的多行对应于目标表中的同一行 这将向您显示目标表的哪些行中有来自源表的多行试图更新它们: select t.Id,t.CardId,count(*) as [count] from CARD_ALERTS as t inner join
正如错误消息和注释中所解释的,源表的多行对应于目标表中的同一行 这将向您显示目标表的哪些行中有来自源表的多行试图更新它们:
select t.Id,t.CardId,count(*) as [count]
from CARD_ALERTS as t
inner join @tblAlerts as s
on (t.Id = s.AlertId and t.CardId = s.CardId)
group by t.Id,t.CardId
having count(*)>1
这还将显示源表的多行:
select t.*,s.*
from CARD_ALERTS as t
inner join @tblAlerts as s on (t.Id = s.AlertId and t.CardId = s.CardId)
inner join
(
select ca.Id,ca.CardId
from CARD_ALERTS as ca
inner join @tblAlerts as s
on (ca.Id = s.AlertId and ca.CardId = s.CardId)
group by ca.Id,ca.CardId
having count(*)>1
)tkey on t.Id=tkey.Id and t.CardId=tkey.CardId
错误消息相对清晰,没有任何数据或模式,无法真正告诉您on谓词中的错误。描述说明了这一切,因此找到了唯一的列组合,这将是细粒度的。
select t.*,s.*
from CARD_ALERTS as t
inner join @tblAlerts as s on (t.Id = s.AlertId and t.CardId = s.CardId)
inner join
(
select ca.Id,ca.CardId
from CARD_ALERTS as ca
inner join @tblAlerts as s
on (ca.Id = s.AlertId and ca.CardId = s.CardId)
group by ca.Id,ca.CardId
having count(*)>1
)tkey on t.Id=tkey.Id and t.CardId=tkey.CardId