2015-09-16 66 views
0

我得到这个错误:不能具有唯一索引在对象中插入重复键行的重复键值的SQL Server

Cannot insert duplicate key row in object 'dbo.CLIENT' with unique index 'CLIENT_idx_A'. The duplicate key value is (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对于我想要更新的所有SOURCE_SYSTEM_CLIENT_ID都是1。所以我认为,它遇到了重复。我该如何解决这个问题?

+1

您遇到该错误,因为您将导致2条记录(338393005,1)。如果允许,您需要删除该索引。这是解决方案。 –

+0

我是否需要删除索引,运行更新查询,然后再次创建索引?或者有什么方法可以删除索引? – AskMe

+0

您的数据库被限制为不允许每个系统有多个客户端记录。如果此规则不再有效且允许重复,则可以删除索引,重新添加非唯一索引并运行更新。 – UnhandledExcepSean

回答

2

显然(?)以下查询将返回您的更新语句正在复制的行;

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

你做些什么来解决,这是你的,要么存在的记录是有效的,并要更新它的一些列,或者您也可以执行所产生的动作之前删除冲突行原来的错误。

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

+0

存在的记录是有效的,我不想删除它。我只想更新一些记录和一些列。 – AskMe

+0

它是一个SQL语句,您执行哪个错误,或者您是否在尝试将错误传递给您的应用程序中的更新?为什么你想改变现有记录的[SOURCE_SYSTEM_CLIENT_ID],这是关系。您需要向您的问题添加更多信息,最好是更新声明(如果可用)。 –

相关问题