无法在具有唯一索引的对象中插入重复键行重复键值SQL Server

时间:2015-09-16 12:32:41

标签: sql-server sql-server-2008 sql-server-2005

我收到此错误:

  

无法在对象' dbo.CLIENT'中插入重复的键行。与众不同   index' CLIENT_idx_A'。重复键值为(14441828,1)。

当我检查索引时,它是这样创建的:

CREATE UNIQUE NONCLUSTERED INDEX [CLIENT_idx_A] ON [dbo].[CLIENT] 
(
     [SOURCE_SYSTEM_CLIENT_ID] ASC,
     [SOURCE_SYSTEM_ID] ASC
)
     WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE  = OFF,
           SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF,
           DROP_EXISTING = OFF, ONLINE = OFF,
           ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]

实际上,我想更新SOURCE_SYSTEM_CLIENT_ID中的一个值,而我想要更新的所有SOURCE_SYSTEM_ID的{​​{1}}为1。所以我认为,它遇到了重复。我怎么解决这个问题?

1 个答案:

答案 0 :(得分:2)

显然(?)以下查询将返回更新语句与之重复的行;

select *
from [dbo].[CLIENT]
where [SOURCE_SYSTEM_CLIENT_ID] = 338393005
and [SOURCE_SYSTEM_ID] = 1

您要解决此问题取决于您,要么存在的记录有效又要更新其中某些列,要么您可能希望在执行生成的操作之前删除冲突的行最初的错误。

如果您没有故意重新开发架构,那么删除约束会有点极端,这会让您容易受到SQL和应用程序中可能损坏数据的错误的影响。只有当你真正了解自己正在做什么以及你想要实现的目标时才会在这里踩踏。