Sql 2不同数据库中的表错误-MERGE语句多次尝试更新或删除同一行

Sql 2不同数据库中的表错误-MERGE语句多次尝试更新或删除同一行,sql,sql-server,tsql,Sql,Sql Server,Tsql,请帮我写剧本 MERGE [Database2].[DBO].[evt_Building Permits] AS stm USING (SELECT * FROM [Database1].[DBO].[PERMIT_TRACKING]) AS sd ON rtrim(ltrim(stm.BUILDING_PERMIT_NO)) = rtrim(ltrim(sd.Building_Permit_Number)) COLLATE DATABASE_DEFAULT WHEN Matched THE

请帮我写剧本

MERGE [Database2].[DBO].[evt_Building Permits] AS stm 
USING (SELECT * FROM [Database1].[DBO].[PERMIT_TRACKING]) AS sd ON rtrim(ltrim(stm.BUILDING_PERMIT_NO)) = rtrim(ltrim(sd.Building_Permit_Number)) COLLATE DATABASE_DEFAULT

WHEN Matched THEN
  UPDATE SET stm.concession = sd.prj_concession;
我正在尝试运行脚本,但收到以下错误:

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

这是我的剧本

MERGE [Database2].[DBO].[evt_Building Permits] AS stm 
USING (SELECT * FROM [Database1].[DBO].[PERMIT_TRACKING]) AS sd ON rtrim(ltrim(stm.BUILDING_PERMIT_NO)) = rtrim(ltrim(sd.Building_Permit_Number)) COLLATE DATABASE_DEFAULT

WHEN Matched THEN
  UPDATE SET stm.concession = sd.prj_concession;

非常感谢您的帮助。

这表明您的源表[Database1].[DBO].[PERMIT\u TRACKING]具有重复的BUILDING\u PERMIT\u NO键

试着找到第号建筑许可证的副本

SELECT BUILDING_PERMIT_NO,count(*) FROM [Database1].[DBO].[PERMIT_TRACKING] group by BUILDING_PERMIT_NO having  count(*) > 0 

如果无法修复源数据,请通过按建筑许可证编号对数据进行分组,确保源查询中有唯一的密钥

我运行此选择建筑许可证编号,从[ws2005PERMITS].[DBO].[PERMIT\U TRACKING]进行计数由BuffeldPimitho数组成的计数>0,得到的结果是237/07、1、231/91、1、251/94、1、471/03 1 799/03,799 /μ/μ/π/α/α/α->都是一个……你可能想看看这篇关于合并的文章,然后再考虑另一种方法。您可以将其更改为带有连接的标准更新,并避免完全合并。