索引视图的两列上的唯一聚簇索引

问题描述:

我试图在没有唯一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

那么错误信息似乎表明,有多个记录,其中MyId1 = 71cd9b68-1a9e-47bc-bc6b-0008b230a6d8MyId2 = 0e64aa3a-0631-4caf-82d9-73609ee79b19

我会建议运行一个查询,选择仅基于该条件,并确认这只返回一个记录。如果它返回更多,那么除非消除重复项,否则不能在这两列上重新创建UNIQUE约束。