2009-12-28 50 views
1

我正在使用SQL Server 2008,有一个以id(数字)列作为主键的表。在三个varchar列上也有一个唯一的索引。我能够添加一行与三列完全相同的一组。我通过对值的简单查询来验证它,并返回了2行。允许重复的SQL Server唯一索引

我编辑了索引并添加了id列。当我试图再次编辑它并删除id列时,它抱怨存在重复的行,它删除了索引但无法创建它。

然后我清理重复的数据库,重新创建索引,使用相同的3个变量作为唯一和非集群,现在它工作正常,不允许重复。

有谁知道为什么这个指数的独特性被忽略?

+0

该索引未禁用,且值完全相同:atsolberg.com/dupPaos.JPG下面的图片显示了索引的属性以及返回的两行的查询+结果。我还在select中添加了len(*),以确保varchars的值是相同的长度。这些行也不是在索引存在之前添加的旧行,而是刚添加的行。 – 2009-12-29 17:52:38

回答

5

该索引可能已被禁用(请参阅Disabling Indexes),您的“重复”值可能不同(例如,尾随空格),或者您的测试可能不正确。

确定您没有在强制唯一索引中插入副本。

+0

该索引未禁用,并且值完全相同:http://atsolberg.com/dupPaos.JPG下面是一张图,显示索引的属性以及返回的两行的查询+结果。我还在select中添加了len(***),以确保varchars的值是相同的长度。 另外这些行不是在索引存在之前添加的旧行,而是刚刚添加的行。 – 2009-12-29 17:51:59

+0

Repro脚本,我会相信你。 – 2009-12-29 17:55:57

+0

SI对于查看SET ANSI PADDING设置和SELECT WHERE子句与该值匹配时的排序规则也很重要。 – 2009-12-29 18:08:07

0

我不是这个问题的专家,但'唯一' - 设置索引可能指的是建立/存储索引的方式,而不是它是一个约束。这也可能意味着指数的表现是次优的。 创建索引时,DBMS可能会检查这一点。