运行以下脚本时出现错误;
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
特别是聚集索引的创建会引发以下错误:
Msg 1018,第15级,状态1,第15行 “ INDEX”附近的语法不正确。如果要将其用作表提示的一部分,则现在需要A WITH关键字和括号。有关正确的语法,请参见SQL Server联机丛书。
这很奇怪,因为它适用于我们所有的服务器,但特定的质量检查服务器除外。我们已经解决的问题是在表创建语句之外创建聚簇索引,但是如果有人之前遇到过此问题,我将很感兴趣。
我必须通过SSMS运行它才能确定,但是这种语法对我来说似乎很遥远。尽管我已将列定义为内联主键(就像您在做的那样),但我从未尝试定义不是这种方式的主键的聚集索引。您正在使用的SQL Server版本根本无法执行您的操作。我认为在通过CREATE TABLE语句创建表之后,应该使用标准的CREATE INDEX定义聚簇索引。
The syntax for inline index declaration was added in SQL Server 2014, though that
iswas absolutely unclear in the officialCREATE TABLE
documentation. After speaking to the documentation owners, that topic now accurately reflects that inline index syntax is only valid starting with SQL Server 2014 (and some variations in 2016):使用该语法的其他实例必须在SQL Server 2014或更高版本上。
在2012年,无论兼容级别如何,您都需要单独创建索引。