Подтвердить что ты не робот

Добавление столбца с первичным ключом в существующую таблицу

Я пытаюсь добавить первичный ключ к вновь добавленному столбцу в существующее имя таблицы Product_Details.

Добавлен новый столбец: Product_Detail_ID (int и not null)

Я пытаюсь добавить первичный ключ к Product_Detail_ID (обратите внимание: в этой таблице нет другого первичного или внешнего ключа)

Я пытаюсь с этим запросом, но получаю ошибку.

ALTER TABLE Product_Details
ADD CONSTRAINT pk_Product_Detils_Product_Detail_ID PRIMARY KEY(Product_Detail_ID)
GO

Ошибка:

Оператор CREATE UNIQUE INDEX завершен, потому что был найден дубликат ключа для имени объекта 'dbo.Product\_Details' и имени индекса 'pk\_Product\_Detils'. Значение дублирующегося ключа равно (0).

Я что-то упустил? Я использую SQL Server 2008 R2. Я был бы признателен за любую помощь.

4b9b3361

Ответ 1

Если вы хотите, чтобы SQL Server автоматически предоставлял значения для нового столбца, сделайте его личным.

ALTER TABLE Product_Details DROP COLUMN Product_Detail_ID
GO
ALTER TABLE Product_Details ADD Product_Detail_ID int identity(1,1) not null
GO
ALTER TABLE Product_Details
add CONSTRAINT pk_Product_Detils_Product_Detail_ID primary key(Product_Detail_ID)
GO

Ответ 2

Вы получаете ошибку, потому что у вас есть существующие данные, которые не заполняют ограничение.

Есть два способа исправить это:

  • очистить существующие данные перед добавлением ограничения
  • добавьте ограничение с параметром "WITH NOCHECK", это остановит сервер sql, проверяющий существующие данные, будут проверяться только новые данные.

Ответ 3

ALTER TABLE Jaya 
  ADD CONSTRAINT no primary key(No);

здесь Jaya - имя таблицы,

no - имя столбца,

ADD CONSTRAINT мы даем ключевое ключевое слово

Ответ 4

В mysql я смог достичь следующего запроса

ALTER TABLE table_name ADD new_column int NOT NULL AUTO_INCREMENT primary key

Ответ 5

к. друг команда: sql > alter table tablename добавить первичный ключ (col_name);

ex: alter table pk_Product_Detils добавить первичный ключ (Product_Detail_ID);