【问题标题】:Unique clustered index on two columns for an indexed view索引视图的两列上的唯一聚集索引
【发布时间】:2012-06-04 20:54:27
【问题描述】:

我正在尝试在没有唯一 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
)

错误:

CREATE UNIQUE INDEX 语句因重复键而终止 为对象名称“dbo.MyView”和索引名称“PK”找到。 重复键值为 (71cd9b68-1a9e-47bc-bc6b-0008b230a6d8, 0e64aa3a-0631-4caf-82d9-73609ee79b19)。

列为重复的两个 ID 是来自 MyId2 的 ID。

那么,我怎样才能在这里创建一个唯一的聚集索引呢?

【问题讨论】:

  • 不只是在该列上重复,是MyId1MyId2 的组合是重复的
  • 运行“通过 MyId1 从 MyView 组中选择 MyId1、MyId2,MyId2 的 count(*) > 1”。这将向您显示您的重复项,因为您可能拥有的不仅仅是显示的组合。 SQL 在遇到其预期跨 MyId1、MyId2 的唯一性异常时出错。
  • 为什么不直接在表上创建索引呢?为什么需要视图?
  • 啊啊啊是的,那些是怎么到那里的?!谢谢大家,整理了一下,瞧,得到了我的索引视图!

标签: sql sql-server


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    • 2011-07-22
    • 2014-02-05
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    相关资源
    最近更新 更多