SQL Server使用没有主键的聚簇索引创建表

Chr*_*sic 19 sql-server clustered-index sql-server-2008 sql-server-2008-r2 azure-sql-database

是否可以从SQL Server 2008中不是主键的create table语句创建聚簇索引?

这个目的是针对SQL Azure中的表,因此我不能首先创建表,然后在表上创建聚簇索引.

编辑:显然它是导致我的问题的FluentMigrator,它的版本表没有聚集索引,因此尝试创建版本控制表而不是我的表是错误的.

Rob*_*oek 43

是的,可以创建不是主键的聚簇索引.只需使用一份CREATE CLUSTERED INDEX声明.

CREATE TABLE dbo.myTable (
    myTableId int PRIMARY KEY NONCLUSTERED
    myColumn int NOT NULL
)

CREATE CLUSTERED INDEX myIndex ON dbo.myTable(myColumn)
Run Code Online (Sandbox Code Playgroud)

在Azure SQL数据库v12版本之前,您必须先拥有聚簇索引,然后才能向表中插入任何数据.从Azure SQL数据库v12开始,现在支持堆(没有聚簇索引的表).

如果您的数据库是在2016年6月之前创建的,则以下是升级到版本12的说明.


Bui*_*ted 8

CREATE TABLE dbo.Table_1
    (
    Id int NOT NULL IDENTITY (1, 1) PRIMARY KEY NONCLUSTERED,
    SomeOtherUniqueColumn int NOT NULL CONSTRAINT Item4 UNIQUE CLUSTERED
)  ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

请注意主键上的非聚集规范

这仍然有效.

CREATE TABLE dbo.Table_1
    (
    SomeOtherUniqueColumn int NOT NULL CONSTRAINT Item4 UNIQUE CLUSTERED
)  ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

  • 问题是`CONSTRAINT`在创建`CLUSTERED`列时需要`PRIMARY KEY`或`UNIQUE` ...不确定除了使用单独的语句之外的其他工作.http://msdn.microsoft.com/en-us/library/ms174979.aspx (2认同)