【问题标题】:SQLServer 2012: Non-Unique index definition during table create?SQLServer 2012:创建表期间的非唯一索引定义?
【发布时间】:2014-03-24 03:48:08
【问题描述】:

我可以在 SQLServer 2012 的 CREATE TABLE 语句期间创建非唯一索引吗?我找到了一些引用这个的预发布文档,但是当我尝试它时,它不起作用。看起来这并没有进入发布,但我想得到一个更明确的答案。

文档表明您可以执行以下操作:

create table rm.test (
  t1 int not null,
  t2 int,
  constraint pk_t1 primary key (t1),
  index idx_t2 (t2)
)

但是,它抱怨“索引”。有没有办法做到这一点,还是在创建表后我坚持做 CREATE INDEX?

【问题讨论】:

    标签: sql-server indexing sql-server-2012


    【解决方案1】:

    没有。

    内联索引定义是 SQL Server 2014 的新定义。

    在这种情况下你可以这样做

    CREATE TABLE rm.test
      (
         t1 INT NOT NULL CONSTRAINT pk_t1 PRIMARY KEY,
         t2 INT,
         CONSTRAINT idx_t2 UNIQUE NONCLUSTERED (t2, t1)
      ) 
    

    虽然是 actually creates the same thing

    默认情况下,主键是聚集索引,CI 键被隐式附加到非唯一的非聚集键以保证唯一性。

    【讨论】:

    • 谢谢你,@Martin Smith。不幸的是,我需要的索引不是唯一的。我只是将索引创建添加到脚本中。
    • @JerseyMike - 我认为你没有理解答案。主键保证唯一,因此如果将其附加到 NCI 键,则保证两列的组合是唯一的。如果您要创建非唯一的非聚集索引,SQL Server 实际上会在幕后执行此操作。即对于这个表定义 UNIQUE NONCLUSTERED (t2, t1)NONCLUSTERED INDEX(t2) 两者的结构完全相同。
    • 你是对的,@Martin Smith。我还不明白。在点击链接并阅读 Kalen 的博客文章之前,我发表了评论。再次感谢您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多