さて、私はいくつかの小さなファイルからファイルを圧縮し、これらの雑多なテーブル用に作成したFGにそれらを移動しています。 WITH (DROP_EXISTING = ON)
オプションを使用してインデックスを再作成することにより、これらのテーブルを移動してきましたが、うまく機能しています。しかし、今回はエラーが発生しました。これが私が実行しているスクリプトです
CREATE Unique CLUSTERED INDEX PK_MyTable
ON dbo.MyTable (MyTableID, RowStatus)
WITH (DROP_EXISTING = ON)
ON FG_Misc;
これを実行すると、次のエラーメッセージが表示されます。
メッセージ1902、レベル16、状態3、行1
テーブル 'dbo.MyTable'に複数のクラスター化インデックスを作成することはできません。別のインデックスを作成する前に、既存のクラスター化インデックスPK_MyTableを削除してください。
これがこの特定のテーブルでこのエラーをスローする理由はわかりませんが、私が取り組んでいる他のエラーはスローされません。
これは、現在の主キーが非クラスター化であり、クラスター化インデックスも存在する場合に発生する可能性があります。
CREATE TABLE dbo.MyTable
(
MyTableID integer NOT NULL,
RowStatus tinyint NOT NULL,
SomeOtherKey integer,
CONSTRAINT [PK_MyTable]
PRIMARY KEY NONCLUSTERED (MyTableID, RowStatus),
CONSTRAINT [CUQ_MyTable]
UNIQUE CLUSTERED (SomeOtherKey)
);
CREATE Unique CLUSTERED INDEX PK_MyTable
ON dbo.MyTable (MyTableID, RowStatus)
WITH (DROP_EXISTING = ON);
メッセージ1902、レベル16、状態3、行14
テーブル 'dbo.MyTable'に複数のクラスター化インデックスを作成できません。別のインデックスを作成する前に、既存のクラスター化インデックス 'CUQ_MyTable'を削除します。
DROP_EXISTING
構文を使用して、主キーを非クラスター化からクラスター化に変更することは有効です。
CREATE TABLE dbo.MyTable
(
MyTableID integer NOT NULL,
RowStatus tinyint NOT NULL,
SomeOtherKey integer,
CONSTRAINT [PK_MyTable]
PRIMARY KEY NONCLUSTERED (MyTableID, RowStatus),
);
CREATE Unique CLUSTERED INDEX PK_MyTable
ON dbo.MyTable (MyTableID, RowStatus)
WITH (DROP_EXISTING = ON);