2009-12-28 97 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可能會檢查這一點。