SQL Server の CREATE TABLE ステートメント内で非クラスター化非一意インデックスを作成する 質問する

SQL Server の CREATE TABLE ステートメント内で非クラスター化非一意インデックスを作成する 質問する

SQL Server CREATE TABLEステートメント内で主キーまたは一意のインデックスを作成することができます。ユニークではないCREATE TABLE ステートメント内のインデックスですか?

CREATE TABLE MyTable(
    a int NOT NULL
    ,b smallint NOT NULL
    ,c smallint NOT NULL
    ,d smallint NOT NULL
    ,e smallint NOT NULL

    -- This creates a primary key
    ,CONSTRAINT PK_MyTable PRIMARY KEY CLUSTERED (a)

    -- This creates a unique nonclustered index on columns b and c
    ,CONSTRAINT IX_MyTable1 UNIQUE (b, c)

    -- Is it possible to create a non-unique index on columns d and e here?
    -- Note: these variations would not work if attempted:
    -- ,CONSTRAINT IX_MyTable2 INDEX (d, e)
    -- ,CONSTRAINT IX_MyTable3 NONCLUSTERED INDEX (d, e)
);
GO

-- The proposed non-unique index should behave identically to
-- an index created after the CREATE TABLE statement. Example:
CREATE NONCLUSTERED INDEX IX_MyTable4 ON MY_TABLE (d, e);
GO

繰り返しますが、目標は、CREATE TABLE ステートメントの後ではなく、ステートメント内で非一意のインデックスを作成することです。

参考までに、私は[SQL Server Books Online の CREATE TABLE のエントリ]役に立つ。

また、[この質問]ほぼ同じですが、受け入れられた答えは適用されません。

ベストアンサー1

SQL 2014では、これは次のように実行できます。インラインインデックスの作成:

CREATE TABLE MyTable(
    a int NOT NULL
    ,b smallint NOT NULL
    ,c smallint NOT NULL
    ,d smallint NOT NULL
    ,e smallint NOT NULL

    -- This creates a primary key
    ,CONSTRAINT PK_MyTable PRIMARY KEY CLUSTERED (a)

    -- This creates a unique nonclustered index on columns b and c
    ,CONSTRAINT IX_MyTable1 UNIQUE (b, c)

    -- This creates a standard non-clustered index on (d, e)
    ,INDEX IX_MyTable4 NONCLUSTERED (d, e)
);
GO

SQL 2014 より前では、CREATE/ALTER TABLE はインデックスではなく、制約のみを追加できました。主キーと一意制約がインデックスとして実装されるのは副作用です。

おすすめ記事