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选择不同的行数