Sql server 2012 如何在sql中更新具有相同id的多行

Sql server 2012 如何在sql中更新具有相同id的多行,sql-server-2012,Sql Server 2012,这是我的密码: 更新行时出现错误 Declare @XMLDocument XML set @XMLDocument = '<EmployeeZoneMapping> <EmployeeZoneData> <EmployeeID>5</EmployeeID> <ServiceCircleZoneID>3</ServiceCircleZoneID> <EmployeeZoneMappingStat

这是我的密码: 更新行时出现错误

Declare @XMLDocument XML
set @XMLDocument = 
'<EmployeeZoneMapping>
  <EmployeeZoneData>
   <EmployeeID>5</EmployeeID>
   <ServiceCircleZoneID>3</ServiceCircleZoneID>
   <EmployeeZoneMappingStatus>1</EmployeeZoneMappingStatus>
  </EmployeeZoneData>
 <EmployeeZoneData>
<EmployeeID>5</EmployeeID>
<ServiceCircleZoneID>6</ServiceCircleZoneID>
<EmployeeZoneMappingStatus>0</EmployeeZoneMappingStatus>
  </EmployeeZoneData>
</EmployeeZoneMapping>'

   ;WITH XmlData AS 
(
SELECT
    A.Details_EmployeeZoneMapping.value('(EmployeeID) [1]','int') AS EmployeeID,
  A.Details_EmployeeZoneMapping.value('(ServiceCircleZoneID) [1]','tinyint') AS ServiceCircleZoneID,
  A.Details_EmployeeZoneMapping.value('(EmployeeZoneMappingStatus) [1]','bit') AS EmployeeZoneMappingStatus
from  @XMLDocument.nodes ('EmployeeZoneMapping/EmployeeZoneData') AS  A (Details_EmployeeZoneMapping))
MERGE INTO dbo.Details_EmployeeZoneMapping t 
USING XmlData x ON t.EmployeeID = x.EmployeeID 
WHEN MATCHED 
   THEN 
     UPDATE SET 
    t.ServiceCircleZoneID = x.ServiceCircleZoneID,
   t.EmployeeZoneMappingStatus = x.EmployeeZoneMappingStatus


WHEN NOT MATCHED 
   THEN 
  INSERT(EmployeeID,ServiceCircleZoneID,EmployeeZoneMappingStatus)
  VALUES(x.EmployeeID, x.ServiceCircleZoneID, x.EmployeeZoneMappingStatus)
;
错误:


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

必须确保找到唯一的记录。您可以使用另一个条件或添加GROUPBY子句来改进USING。执行SELECT并查看重复记录,它将提示您如何改进SELECTI try it TILL错误消息2627,级别14,状态1,第2行违反唯一密钥约束“UQ_EmployeeOne”。无法在对象“dbo.Details\u EmployeeZoneMapping”中插入重复键。重复的键值是5,6。本声明已终止。我将上述代码更改为:;使用XmlData作为SELECT distinct ROW_NUMBER OVERPARTITION BY EmployeeID order BY EmployeeID AS RowNum,EmployeeID,servicecurlezoneid,EmployeeZoneMappingStatus from temp MERGE dbo.Details_EmployeeZoneMapping t使用XmlData x ON t.EmployeeID=x.EmployeeID匹配且RowNum=1时,必须确保找到唯一记录。您可以使用另一个条件或添加GROUPBY子句来改进USING。执行SELECT并查看重复记录,它将提示您如何改进SELECTI try it TILL错误消息2627,级别14,状态1,第2行违反唯一密钥约束“UQ_EmployeeOne”。无法在对象“dbo.Details\u EmployeeZoneMapping”中插入重复键。重复的键值是5,6。本声明已终止。我将上述代码更改为:;使用XmlData从temp MERGE dbo.Details使用XmlData x在t.EmployeeID=x.EmployeeID匹配且RowNum=1时,使用XmlData x从temp MERGE dbo.Details\u EmployeeZoneMapping t按EmployeeID顺序按EmployeeID为RowNum、EmployeeID、serviceclezoneid、EmployeeZoneMappingStatus选择不同的行数