Sql server 2012 2012年和2016年的SQL Server索引创建

Sql server 2012 2012年和2016年的SQL Server索引创建,sql-server-2012,sql-server-2016,Sql Server 2012,Sql Server 2016,以下索引脚本在SQL Server 2012中失败: CREATE TABLE #ContextDetailTaskTable ( ContextDetailID bigint not null, index #ContextDetailTaskTableIndex clustered (ContextDetailID) ) CREATE TABLE #ContextIDTable ( ContextDetailID bigint NOT NULL,

以下索引脚本在SQL Server 2012中失败:

CREATE TABLE #ContextDetailTaskTable  
(
    ContextDetailID bigint not null,
    index #ContextDetailTaskTableIndex clustered (ContextDetailID)
)
CREATE TABLE #ContextIDTable  
(
     ContextDetailID bigint NOT NULL,
     ID1 INT NOT NULL identity(1,1),

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

“索引”附近的语法不正确。如果这是作为表提示的一部分,那么现在需要一个WITH关键字和括号。有关正确的语法,请参阅SQL Server联机丛书

而在SQL Server 2016中也是如此

我已将事务隔离级别设置为快照,因此创建索引无法工作

我们添加了一个伪列,并在其中添加了标识。希望这不会影响性能

SQL Server 2012中的变通方法:

CREATE TABLE #ContextDetailTaskTable  
(
    ContextDetailID bigint not null,
    index #ContextDetailTaskTableIndex clustered (ContextDetailID)
)
CREATE TABLE #ContextIDTable  
(
     ContextDetailID bigint NOT NULL,
     ID1 INT NOT NULL identity(1,1),

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

您应该使用以下代码:

CREATE TABLE #ContextDetailTaskTable  
(
    ContextDetailID BIGINT NOT NULL
        CONSTRAINT PK_ContextDetailTaskTable PRIMARY KEY CLUSTERED
)
定义一个约束并使其成为聚集主键。这将在幕后自动创建索引

这在任何版本的SQLServer2005和更新版本中都可以正常工作


如果您查看,您将看到您使用的
索引….
语法仅适用于SQL Server2014及更新版本。

@MartinSmith:这是真的-我从提问的方式猜到情况会是这样-但不清楚,我同意。当然,只有当
ID
实际上是主键,因此是唯一的--2016创建表#ContextIDTable(ContextDetailID bigint非空,索引#ContextDetailTableIndex clustered(ContextDetailID))--2012创建表#WFEngineQueueCompleteOrvenInstanceTable(ID uniqueidentifier不为NULL,约束PK_35; WFEngineQueueCompleteOrphanneInstanceTable主键群集(ID))我们得到一些临时表的主要错误,是否有一个解决方法来创建没有主键的索引。@omkar:请不要将代码样本或样本数据放入注释中-因为您无法格式化,所以阅读它非常困难…相反:通过编辑它来更新您的问题,以提供附加信息!谢谢。当然可以我为此感到非常高兴。