5

というテーブルがありますAnimal。は主キーであり、列をUNIQUEAnimalIdに設定したかった(テーブルがあり、ここで外部キーを設定する必要がある)AnimalType_idAnimalType

ALTER TABLE Animal
ADD UNIQUE Animal.AnimalType_id int

両方のテーブルにすでにデータがあります。そのため、テーブルを削除できません。

ただし、これによりエラーが発生します。

メッセージ102、レベル15、状態1、行2
'。'の近くの構文が正しくありません。

4

5 に答える 5

23

テーブル制約を追加する方法については、ドキュメントを参照してください。

ALTER TABLE Animal ADD CONSTRAINT UQ_Animal_AnimalTypeId UNIQUE (AnimalType_id)

AnimalType_idは外部キーのように思われるので、この列を一意にすることで、関係を1対1にすることを理解していることを確認したいと思います。つまり、各タイプの動物は1匹しか持てません。

一意性制約の追加でエラーが発生するため、一意性制約ではなく外部キーが実際に必要であることをお勧めします。

ALTER TABLE Animal
    ADD CONSTRAINT FK_Animal_AnimalType
    FOREIGN KEY
    (
        AnimalType_id
    )
    REFERENCES AnimalType
    (
        id
    )

AnimalTypeテーブル名とその主キー列名を推測する必要がありました。正しくない場合は、これらを変更してください。

于 2012-05-25T06:27:33.490 に答える
2

作成するすべてのオブジェクト(制約も含む)に名前を付ける習慣を身に付けた場合、後で制約を無効化、削除、または変更する必要があるときに、より簡単に時間を割くことができます。

ALTER TABLE Animal ADD CONSTRAINT UQ_Animal_Type UNIQUE (AnimalType_id)

一意のインデックスを作成することで、より柔軟な制約のような効果を得ることができます。

于 2012-05-25T06:36:58.707 に答える
0

私はあなたがこれをやろうとしていると思います:

ALTER TABLE Animal
ADD COLUMN AnimalType_id int;
于 2012-05-25T06:17:13.330 に答える
0

列のデータは一意ではないようです。列に一意性制約を作成する場合、重複するエントリを含めることはできません(最大で1つのnullを含めることができます)

于 2012-05-25T07:03:49.903 に答える
-1

これを試して

ALTER TABLE table_name ADD CONSTRAINT UNIQUE(column_name)

于 2014-06-29T14:38:33.927 に答える