在创建表时是否可以创建非聚集索引?

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

执行上述操作时出现错误。

“index”附近的语法不正确。如果这是作为表提示的一部分意图,请使用WITH关键字和括号。请参阅SQL Server Books Online以获取正确的语法。


1
SQL Server的哪个版本?对我来说,2016可以。微软表示它适用于2014及以上版本。 - SQLChao
它在2012年对我不起作用,https://learn.microsoft.com/en-us/sql/t-sql/statements/create-table-transact-sql 上的一个示例也无法工作 CREATE TABLE t4( c1 int, c2 int, INDEX ix_1 NONCLUSTERED (c1,c2)) 相同的错误信息。 - Horaciux
根据此链接,此语法应该适用于SQL Server 2014版本及以上。 - Emilio Lucas Ceroleni
3个回答

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); 

非常感谢。但是括号内是否有可能存在查询? - Msd Manikandan Karur

1
根据CREATE TABLE documentation,此语法适用于2014版本及更高版本的SQL Server。您可以在文章中找到以下信息:
INDEX *index_name* [ CLUSTERED | NONCLUSTERED ] (*column_name* [ ASC | DESC ] [ ,... *n* ] )

Applies to: SQL Server 2014 through SQL Server 2017 and Azure SQL Database.

Specifies to create an index on the table. This can be a clustered index, or a nonclustered index. The index will contain the columns listed, and will sort the data in either ascending or descending order.

如果您的版本在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); 

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总是将聚集键添加到在具有聚集索引的表上创建的非唯一非聚集索引的键中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接