sql-server - 重複 - 複合主キー インデックス




複合主キーでのvarcharの長さの変更方法 (2)

このインデックスを最後に作成したときに警告が表示された場合は、許可された900バイトを超えるインデックスキーを作成する可能性があります。 (PKはクラスタ化されたインデックス(デフォルト)またはそれを強制するNCインデックスのいずれかになります。

MSSQLでは、私はこのように作成されたテーブルを持っています:

CREATE TABLE [mytable] (fkid int NOT NULL, data varchar(255) CONSTRAINT DF_mytable_data DEFAULT '' NOT NULL);
ALTER TABLE [mytable] ADD CONSTRAINT PK_mytable_data PRIMARY KEY (fkid, data);

今私は 'データ'の列の長さを255から4000に増やしたいと思っています。

私が試してみると:

ALTER TABLE [mytable] ALTER COLUMN data varchar(4000);

次に、私はこのエラーが発生します:

The object 'PK_mytable_data' is dependent on the column 'data'

私がこれを試してみると:

ALTER TABLE [mytable] DROP CONSTRAINT PK_mytable_data;
ALTER TABLE [mytable] ALTER COLUMN data varchar(4000);
ALTER TABLE [mytable] ADD CONSTRAINT PK_mytable_data PRIMARY KEY (fkid, data);

次に、私はこのエラーが発生します:

Cannot define PRIMARY KEY constraint on nullable column in table 'mytable'

私は何が欠けていますか? どちらの列もNOT NULLで定義されています。なぜ、MSSQLがドロップした後でこの制約を再作成できないと報告するのですか?

ありがとう! エヴァン


データ型をvarchar(4000)に変更すると、 NULLs受け入れるようになります。

これを試して:

ALTER TABLE [mytable] DROP CONSTRAINT PK_mytable_data;
ALTER TABLE [mytable] ALTER COLUMN data varchar(4000) NOT NULL;
ALTER TABLE [mytable] ADD CONSTRAINT PK_mytable_data PRIMARY KEY (fkid, data);

インデックスサイズ(暗黙的にPKに対して作成される)は900バイトに制限され、大きな値の挿入は失敗することに注意してください。





constraints