ヒープ テーブルがあります - クラスター化インデックスが定義されていません ( と呼びますtable A
)。null 非許容列に一意の非クラスター化インデックスがあります ( と を呼び出しますcolumn ID
) index IX
。
for でindex IX
主キー制約を定義するときに使用したいと思います。column ID
table 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 が作成するインデックスを変更できれば問題は解決しますが、それを変更するには削除して再作成する必要があります。