Изменение таблицы и добавление уникального ключа приводит к ошибке

У меня есть стол с именемAnimal. AnimalId является первичным ключом, и я хотел установить столбецAnimalType_id как уникальный (у меня естьAnimalType таблица и здесь нужно установить внешний ключ)

ALTER TABLE Animal
ADD UNIQUE Animal.AnimalType_id int

В обеих таблицах уже есть данные, поэтому я не могу удалить таблицу.

Это, однако, приводит к ошибке:

Msg 102, уровень 15, состояние 1, строка 2
Неправильный синтаксис рядом с '.'.

Ответы на вопрос(5)

Я думаю, ты пытаешься сделать это:

ALTER TABLE Animal
ADD COLUMN AnimalType_id int;

Смотридокументаци о том, как добавить ограничение таблицы.

ALTER TABLE Animal ADD CONSTRAINT UQ_Animal_AnimalTypeId UNIQUE (AnimalType_id)

Похоже, что AnimalType_id - это внешний ключ, поэтому я просто хотел убедиться, что вы поняли, что, сделав этот столбец уникальным, вы устанавливаете отношения один-один - вы сможете иметь только одно животное каждого типа.

Так как вы получаете сообщение об ошибке при добавлении уникального ограничения, я собираюсь предположить, что вам действительно нужен внешний ключ вместо уникального ограничения:

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

Мне нужно было угадать имя таблицы AnimalType и имя столбца первичного ключа - измените их, если они неверны.

данные в столбце не уникальны. когда вы создаете уникальное ограничение для столбца, у вас не может быть повторяющихся записей (вы можете иметь не более одного нуля)

чениям), вам будет легче, когда вам нужно будет отключить, удалить или изменить ограничение:

ALTER TABLE Animal ADD CONSTRAINT UQ_Animal_Type UNIQUE (AnimalType_id)

Также возможно получить более гибкий эффект, подобный ограничениям, путем создания уникального индекса.

ALTER TABLE table_name ADD CONSTRAINT UNIQUE (имя_ столбца)

ВАШ ОТВЕТ НА ВОПРОС