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

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

ALTER TABLE Animal
ADD UNIQUE Animal.AnimalType_id int

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

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

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

 Conrad Frix25 мая 2012 г., 08:16
И ошибка ...
 TechGuy25 мая 2012 г., 08:21
@ Conrad Frix Да ошибка в чем?
 TechGuy25 мая 2012 г., 08:25
Msg 102, уровень 15, состояние 1, строка 2 Неверный синтаксис рядом с '.'.
 Daniel Renshaw25 мая 2012 г., 08:23
@ chathuraRanasinghe Какое сообщение об ошибке вы видите, когда пытаетесь добавить уникальное ограничение?

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

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

ALTER TABLE Animal
ADD COLUMN AnimalType_id int;
 TechGuy25 мая 2012 г., 08:22
Нет, на самом деле. У меня уже есть столбец с именем AnimalType_id. Я хотел установить этот идентификатор в качестве УНИКАЛЬНОГО ключа
Решение Вопроса

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

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 и имя столбца первичного ключа - измените их, если они неверны.

 TechGuy25 мая 2012 г., 08:31
тогда я получил эту ошибку ..
 marc_s25 мая 2012 г., 08:31
И даже лучше:названи ваше уникальное ограничение!ALTER TABLE Animal ADD CONSTRAINT UQ_Animal_AnimalTypeId UNIQUE (AnimalType_id)
 TechGuy25 мая 2012 г., 08:32
Msg 156, уровень 15, состояние 1, строка 3 Неверный синтаксис рядом с ключевым словом «UNIQUE».
 Daniel Renshaw25 мая 2012 г., 08:34
@ chathuraRanasinghe К сожалению, имя ограничения требуется, когдаCONSTRAINT ключевое слово используется. Ответ отредактирован; и спасибо @ marc_s.
 marc_s25 мая 2012 г., 09:56
@ chathuraRanasinghe: очевидно, ваши данные уже имеют дубликаты - вы не можете создать УНИКАЛЬНОЕ ограничение для столбца, который содержит повторяющиеся значения. Исправьте эти дубликаты - итогд вы можете создать уникальное ограничение

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

 TechGuy25 мая 2012 г., 12:40
на самом деле это передача данных из 1 дБ в другой дБ с добавлением дополнительных столбцов. Вот почему

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

ALTER TABLE Animal ADD CONSTRAINT UQ_Animal_Type UNIQUE (AnimalType_id)

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

 Jirka Hanika25 мая 2012 г., 09:03
Понял сейчас.UNIQUE а такжеFOREIGN KEY это две разные вещи.ALTER TABLE Animal ADD CONSTRAINT FK_Animal_Type FOREIGN KEY (AnimalType_id) REFERENCES Animal_Type(AnimalType_id)
 TechGuy25 мая 2012 г., 08:40
У меня уже есть первичный ключ в этой таблице. Я получил эту ошибку> Сообщение 1505, Уровень 16, Состояние 1, Строка 1 Оператор CREATE UNIQUE INDEX завершился, потому что был найден повторяющийся ключ для имени объекта 'dbo.Animal' и имя индекса 'UQ_Animal_AnimalTypeId'. Значение дубликата ключа (1). -

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

Ваш ответ на вопрос