创建表时是否可能使用非聚集索引?

时间:2017-12-28 23:27:01

标签: sql sql-server

create table tblPeople 
(
     sno int  primary key ,  
     Name nvarchar(50), 
     Gender nvarchar(10) , 
     Age int ,
     index IX_tblPeople_Age nonclustered(age)
) 

我在上面执行时遇到错误。

  

'index'附近的语法不正确。如果这是作为表提示的一部分,则现在需要A WITH关键字和括号。有关正确的语法,请参阅SQL Server联机丛书。

3 个答案:

答案 0 :(得分:1)

您能否使用表格后创建索引的传统语法?

CREATE TABLE tblPeople (
     sno int  primary key ,  
     Name nvarchar(50), 
     Gender nvarchar(10) , 
     Age int
) 
CREATE NONCLUSTERED INDEX IX_tblPeople_Age ON tblPeople (age); 

答案 1 :(得分:1)

根据CREATE TABLE documentation,此语法适用于2014版本的SQL Server及更高版本。您可以在文章中找到以下信息:

INDEX *index_name* [ CLUSTERED | NONCLUSTERED ] (*column_name* [ ASC | DESC ] [ ,... *n* ] )
     

适用于:SQL Server 2014到SQL Server 2017和Azure SQL   数据库中。

     

指定在表上创建索引。这可以是群集的   索引或非聚簇索引。索引将包含列   列出,并将按升序或降序对数据进行排序   顺序。

因此,如果您的版本早于2014年,我会建议使用以下语法:

CREATE TABLE tblPeople (
 sno int  primary key ,  
 Name nvarchar(50), 
 Gender nvarchar(10) , 
 Age int
) 
GO
CREATE NONCLUSTERED INDEX IX_tblPeople_Age ON tblPeople (age); 

答案 2 :(得分:0)

使用与2008兼容的内联语法

可以获得相同的结果
create table tblPeople 
(
     sno int  primary key ,  
     Name nvarchar(50), 
     Gender nvarchar(10) , 
     Age int ,
     Constraint IX_tblPeople_Age unique nonclustered(age, sno)
) 

由于sno将是CI密钥,SQL Server始终将聚簇密钥添加到在具有聚簇索引的表上创建的非唯一非聚簇索引的密钥。