Sql server 允许重复的SQL Server唯一索引

Sql server 允许重复的SQL Server唯一索引,sql-server,unique-index,Sql Server,Unique Index,我使用的是SQL Server 2008,它有一个id(数字)列作为主键的表。在三个varchar列上也有一个唯一的索引。我能够添加一行,其中包含完全相同的三列。我用一个简单的值查询来验证它,返回了2行 我编辑了索引并添加了id列。当我试图再次编辑它并删除id列时,它抱怨有重复的行,它删除了索引,但无法创建它 然后,我清理数据库中的重复项,使用与unique和nonclustered相同的3个varchar重新创建索引,现在它工作正常,不允许重复 有人知道为什么这个索引的唯一性被忽略了吗 索引可

我使用的是SQL Server 2008,它有一个id(数字)列作为主键的表。在三个varchar列上也有一个唯一的索引。我能够添加一行,其中包含完全相同的三列。我用一个简单的值查询来验证它,返回了2行

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

然后,我清理数据库中的重复项,使用与unique和nonclustered相同的3个varchar重新创建索引,现在它工作正常,不允许重复


有人知道为什么这个索引的唯一性被忽略了吗

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


请确保未在强制唯一索引中插入重复项。

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


当然,您没有在强制唯一索引中插入重复项。

我不是这方面的专家,但索引的“是唯一的”——设置可能指的是索引的生成/存储方式,而不是约束。这可能也意味着指数的表现是次优的。
创建索引时,DBMS可能会对此进行检查。

我不是这方面的专家,但索引的“是唯一的”——设置可能指的是索引的构建/存储方式,而不是约束。这可能也意味着指数的表现是次优的。
创建索引时,DBMS可能会对此进行检查。

索引未被禁用,且值完全相同:下面的图片显示了索引的属性以及返回的两行的查询+结果。我还在select中添加了len(***),以确保varchars值的长度相同。此外,这些行不是索引存在之前添加的旧行,它们只是添加的。我相信你。查看SET ANSI PADDING设置和SELECT WHERE子句与值匹配的排序规则也很重要。
SELECT COUNT(*)、PAOClass、Category、PAOName FROM YukonPAOBJECT HAVING COUNT(*)>按PAOClass、Catgory、PAOName划分的1组
。这会返回任何行吗?索引没有被禁用,并且值完全相同:下面的图片显示了索引的属性和返回的两行的查询+结果。我还在select中添加了len(***),以确保varchars值的长度相同。此外,这些行不是索引存在之前添加的旧行,它们只是添加的。我相信你。查看SET ANSI PADDING设置和SELECT WHERE子句与值匹配的排序规则也很重要。
SELECT COUNT(*)、PAOClass、Category、PAOName FROM YukonPAOBJECT HAVING COUNT(*)>按PAOClass、Catgory、PAOName划分的1组
。这是否返回任何行?索引未被禁用,值完全相同:atsolberg.com/dupPaos.JPG这是一张图片,显示了索引的属性和返回的两行的查询+结果。我还在select中添加了len(*),以确保varchars值的长度相同。此外,这些行不是索引存在之前添加的旧行,它们只是添加的。索引未被禁用,值完全相同:atsolberg.com/dupPaos.JPG这里有一张图片,显示了索引的属性和返回的两行的查询+结果。我还在select中添加了len(*),以确保varchars值的长度相同。此外,这些行不是索引存在之前添加的旧行,它们只是添加的。