Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解决这个特定于SQL的合并问题_Sql_Sql Server_Tsql - Fatal编程技术网

如何解决这个特定于SQL的合并问题

如何解决这个特定于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

如何解决错误:

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


正如错误消息和注释中所解释的,源表的多行对应于目标表中的同一行

这将向您显示目标表的哪些行中有来自源表的多行试图更新它们:

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