web-dev-qa-db-ja.com

クラスタ化インデックスの作成がテーブルの作成に失敗する

次のスクリプトを実行するとエラーが発生します。

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 

特に、次のエラーをスローするクラスター化インデックスの作成です。

メッセージ1018、レベル15、状態1、行15
「INDEX」付近の構文が正しくありません。これがテーブルヒントの一部として意図されている場合、WITHキーワードと括弧が必要になりました。適切な構文については、SQL Server Books Onlineを参照してください。

特定のQAサーバーを除くすべてのサーバーで機能するため、これは奇妙です。私たちが行った修正は、テーブル作成ステートメントの外でクラスター化インデックスを作成することですが、誰かが以前にこの問題に遭遇したことがあれば、興味がありますか?

10
Rich Benner

インラインインデックス宣言の構文はSQL Server 2014で追加されましたが、 ですだった公式CREATE TABLEドキュメント 。ドキュメントの所有者と話した後、そのトピックは、インラインインデックス構文がSQL Server 2014(および2016年のいくつかのバリエーション)以降でのみ有効であることを正確に反映しています。

enter image description here

この構文が機能する他のインスタンスは、SQL Server 2014以降である必要があります。

2012では、互換性レベルに関係なく、インデックスを個別に作成する必要があります。

11
Aaron Bertrand