2012-06-04 102 views
2

我試圖在沒有唯一ID的表上設置索引視圖。它有兩個獨特的標識符,如果組合起來就是唯一的行。我在創建索引視圖所需的唯一聚集索引時遇到了麻煩,當我在MSDN上發現一個線程時,所有人都同意可以爲索引視圖創建2列中的唯一聚簇索引@http://social.msdn.microsoft.com/Forums/en/transactsql/thread/f2c99845-3af1-46e8-9b52-363c24988744索引視圖的兩列上的唯一聚簇索引

但對於我的生活,無法弄清楚如何創建它。我跟這個查詢一起滾動,但它似乎並沒有削減它。

CREATE UNIQUE CLUSTERED INDEX [PK] ON MyView 
(
MyId1, MyId2 
) 

錯誤:

The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name 'dbo.MyView' and the index name 'PK'. The duplicate key value is (71cd9b68-1a9e-47bc-bc6b-0008b230a6d8, 0e64aa3a-0631-4caf-82d9-73609ee79b19).

列爲重複兩個ID從MyId2的ID。

那麼,我怎麼能在這裏創建一個獨特的聚集索引?

+6

它是不是一個重複只是在該列中,是重複 – Lamak

+1

運行「由MyId1,MyId2具有COUNT(*)> 1從MyView的組中選擇MyId1,MyId2」 MyId1'的'的結合和'MyId2' 。這將顯示你的重複,因爲你可能不僅僅是所顯示的組合。 SQL在遇到MyId1,MyId2期望的唯一性異常時發生了錯誤。 – Zhenny

+0

爲什麼不直接在桌子上創建索引?你爲什麼需要一個觀點? – Magnus

回答

2

那麼錯誤信息似乎表明,有多個記錄,其中MyId1 = 71cd9b68-1a9e-47bc-bc6b-0008b230a6d8MyId2 = 0e64aa3a-0631-4caf-82d9-73609ee79b19

我會建議運行一個查詢,選擇僅基於該條件,並確認這隻返回一個記錄。如果它返回更多,那麼除非消除重複項,否則不能在這兩列上重新創建UNIQUE約束。