如何在Create Table中创建非聚簇索引?

Ras*_*wla 18 sql-server sql-server-2008

Create table FavoriteDish    
(    
FavID int identity (1,1) primary key not null,    
DishID int references Dishes(DishID) not null ,    
CelebrityName nvarchar(100)  nonclustered not null     
)
Run Code Online (Sandbox Code Playgroud)

这导致了

关键字'nonclustered'附近的语法不正确.

我提到了创建表语法的MSDN帮助.我不确定这里有什么不对.

edo*_*oft 19

实际上,在线图书中的帮助确实提到了关键字CLUSTERED,但它仅与UNIQUE或PRIMARY KEY约束相关.这两个约束都会创建索引,您可以指定该索引是集群还是非集群.

您无法使用该语法来创建标准的非聚集索引.

Create table FavoriteDish    
(    
FavID int identity (1,1) primary key not null,    
DishID int references Dishes(DishID) not null ,    
CelebrityName nvarchar(100)   constraint ux_CelebrityName unique NONCLUSTERED not null     
)
Run Code Online (Sandbox Code Playgroud)

  • 不要忘记为索引PK_添加适当的名称约定主键UK_用于唯一键IX_用于非聚簇非唯一索引UX_用于唯一索引所有索引名称采用<索引或键类型> _ <table的形式name> _ <column 1> _ <column 2> _ <column n> (5认同)

Svi*_*ack 14

擦除此非聚集关键字并使用CREATE INDEX语句向此表添加索引,此文档可以读入:

http://msdn.microsoft.com/en-us/library/ms188783.aspx

语法在这里:

CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name 
    ON <object> ( column [ ASC | DESC ] [ ,...n ] ) 
    [ INCLUDE ( column_name [ ,...n ] ) ]
    [ WHERE <filter_predicate> ]
    [ WITH ( <relational_index_option> [ ,...n ] ) ]
    [ ON { partition_scheme_name ( column_name ) 
         | filegroup_name 
         | default 
         }
    ]
    [ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]

[ ; ]
Run Code Online (Sandbox Code Playgroud)

代码在这里:

CREATE NONCLUSTERED INDEX index_clustered ON FavoriteDish(CelebrityName asc)
Run Code Online (Sandbox Code Playgroud)

  • Svisstack,谢谢你,我知道这一点,但我不能在create table语句中创建它.正如Create Table语法所说,可以使用Create Table语句创建NON-UNIQUE NONCLUSTERED索引 (4认同)