2012年和2016年创建SQL Server索引

时间:2017-12-21 07:01:25

标签: sql-server-2012 sql-server-2016

SQL Server 2012中索引脚本失败:

CREATE TABLE #ContextDetailTaskTable  
(
    ContextDetailID bigint not null,
    index #ContextDetailTaskTableIndex clustered (ContextDetailID)
)

错误:

  

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

然而在SQL Server 2016中也是如此。

我已将事务隔离级别设置为快照,因此创建索引无法正常工作https://connect.microsoft.com/SQLServer/feedback/details/531747/error-3964-on-create-index-on-temporary-table-under-snapshot-isolation-level

我们添加了一个虚拟列并在其中添加了标识。希望这不影响性能吗?

SQL Server 2012中的解决方法:

CREATE TABLE #ContextIDTable  
(
     ContextDetailID bigint NOT NULL,
     ID1 INT NOT NULL identity(1,1),

     CONSTRAINT PK_#ContextIDTable 
         PRIMARY KEY CLUSTERED (ContextDetailID, ID1)
)

1 个答案:

答案 0 :(得分:1)

您应该使用此代码:

CREATE TABLE #ContextDetailTaskTable  
(
    ContextDetailID BIGINT NOT NULL
        CONSTRAINT PK_ContextDetailTaskTable PRIMARY KEY CLUSTERED
)

定义约束并使其成为群集主键。这将自动在幕后创建一个索引。

这在任何版本的SQL Server 2005及更高版本中都可以正常工作。

如果查看Microsoft documentation on CREATE TABLE,您会发现您使用的index .....语法仅适用于SQL Server 2014