3

ヒープ テーブルがあります - クラスター化インデックスが定義されていません ( と呼びますtable A)。null 非許容列に一意の非クラスター化インデックスがあります ( と を呼び出しますcolumn ID) index IX

for でindex IX主キー制約を定義するときに使用したいと思います。column IDtable A

どこかのドキュメントには次のように書かれています:

データベース エンジンDatabase Engine は、一意のインデックスを自動的に作成して、PRIMARY KEY 制約の一意性の要件を適用します。テーブルにクラスター化インデックスがまだ存在しない場合、または非クラスター化インデックスが明示的に指定されていない場合は、PRIMARY KEY 制約を適用するために一意のクラスター化インデックスが作成されます。

ドキュメント全体を読みましたALTER TABLEが、「非クラスター化インデックスが...明示的に指定されている」という構文がないようです。

非クラスター化を定義してindex IX主キーを指定しようとしましたが、alter table ... add constraint ... primary key ステートメントのさまざまな組み合わせも試しましたが、役に立ちませんでした。

私のインデックス IX は、alter table .... add constraint .... 主キー (ID) ステートメントで ID 列を指定するだけで、SQL Server が作成する非クラスター化インデックスと同等であることは理にかなっていますが、私はそうしないことを好みます。 SQL Serverが私のために作成するこの冗長インデックスを持ち、むしろindex IX列のインクルードリストで構成される を使用します。

SQL Server が作成するインデックスを削除すると、主キー制約もなくなります。

SQL Server が作成するインデックスを変更できれば問題は解決しますが、それを変更するには削除して再作成する必要があります。

4

1 に答える 1