表创建时聚集索引创建失败

Ric*_*ner 10 index sql-server clustered-index ddl sql-server-2012

运行以下脚本时出现错误;

IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES 
  WHERE TABLE_TYPE='BASE TABLE' AND TABLE_NAME='Table_Name')
BEGIN
CREATE TABLE Table_Name
(
    Field_Name_1 binary(32) NOT NULL CONSTRAINT PK_Name_Goes_Here PRIMARY KEY NONCLUSTERED
    , Field_Name_2 int NOT NULL 
    , Field_Name_3 datetime NOT NULL INDEX IX_Name_Goes_Here CLUSTERED
)
END 
Run Code Online (Sandbox Code Playgroud)

特别是它的聚集索引创建抛出以下错误:

消息 1018,级别 15,状态 1,第 15 行
“INDEX”附近的语法不正确。如果这是作为表提示的一部分,现在需要 WITH 关键字和括号。有关正确的语法,请参阅 SQL Server 联机丛书。

这很奇怪,因为它适用于我们所有的服务器,除了特定的 QA 服务器。我们采取的修复措施是在表创建语句之外创建聚集索引,但如果有人以前遇到过这个问题,我会感兴趣吗?

Aar*_*and 12

内联指数声明的语法在SQL Server 2014中添加,虽然这就是 在完全不清楚官方CREATE TABLE文档。在与文档所有者交谈后,该主题现在准确地反映了内联索引语法仅从 SQL Server 2014(以及 2016 年的一些变体)开始有效:

在此处输入图片说明

此语法适用于您的其他实例必须在 SQL Server 2014 或更高版本上。

在 2012 年,无论兼容性级别如何,您都需要单独创建索引。