添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

0 人关注

我得到了这个错误。

不能在对象'dbo.CLIENT'中插入具有唯一索引'CLIENT_idx_A'的重复键行。 索引'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 对于我想更新的所有SOURCE_SYSTEM_CLIENT_ID 是1。所以我认为,它遇到了重复。我怎样才能解决这个问题呢?

5 个评论
你遇到这个错误是因为你将导致2条记录与(338393005,1)。如果允许这样,你需要删除那个索引。这就是解决办法。
我是否需要删除索引,运行更新查询,然后再次创建索引?或者有什么方法可以删除索引吗?
你的数据库被限制为每个系统不允许有多于一条客户记录。如果这个规则不再有效,并且允许重复,那么你可以放弃这个索引,重新添加索引为非唯一性,然后运行你的更新。
或者,如果索引的存在是有原因的,与其更新记录,不如删除你试图更新的记录,这将导致重复。当然,也可以添加那些不会导致重复的记录。
抛出上述错误的语句是什么?
sql-server
sql-server-2008
sql-server-2005
AskMe
AskMe
发布于 2015-09-16
1 个回答
Edward Comeau
Edward Comeau
发布于 2015-09-16
0 人赞同

很明显(?),下面的查询将返回你的更新语句与之重复的行。

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