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)
)
答案 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 。