Нарушение ограничения PRIMARY KEY «PK_Address». и т.д…. что я делаю неправильно?

Вопрос:Вечер все. Я новичок в SQL, но довольно много обманывал. Я следую руководству, которое я нашел в Интернете, чтобы узнать SQL через 21 день, и у меня возникли проблемы с выяснением того, что вызывает ошибка. Я пытаюсь использовать данные INSERT в существующей таблице. Первичный ключ для этой таблицы AddressID. Данные, которые я пытаюсь ввести, находятся

Вопрос:

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

Я пытаюсь использовать данные INSERT в существующей таблице. Первичный ключ для этой таблицы AddressID. Данные, которые я пытаюсь ввести, находятся в коде ниже:

INSERT INTO [dbo].[Address] (AddressID,Street,City,State,ZipCode) VALUES (1,’2400 Broadway’,’New York’,’NY’,11201), (2,’320 21st Street’,’Atlanta’,’GA’,303), (3,’439 Skyline Blvd’,’Seattle’,’WA’,98101), (4,’56 Park Avenue’,’Dallas’,’TX’,75201); GO

Я продолжаю получать эту ошибку:

Msg 2627, уровень 14, состояние 1, строка 2 Нарушение первичного ключа ограничение “PK_Address”. Невозможно вставить дублирующий ключ в объект ‘Dbo.Address. Значение дублирующегося ключа равно (1).

Я пробовал все, о чем я могу думать, но я не могу обновить таблицу. Мои имена столбцов в разделе INSERT INTO верны, и мои VALUES также верны. Я обнаружил, что могу использовать один оператор INSERT для получения моих данных в таблице. Первоначально я использовал 4 отдельных заявления.

Что я делаю неправильно?

Лучший ответ:

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

INSERT INTO [dbo].[Address] (Street,City,State,ZipCode) VALUES (‘2400 Broadway’,’New York’,’NY’,11201), (‘320 21st Street’,’Atlanta’,’GA’,303), (‘439 Skyline Blvd’,’Seattle’,’WA’,98101), (’56 Park Avenue’,’Dallas’,’TX’,75201); GO Ответ №1

Из сообщения об ошибке очень ясно, что уже AddressID = 1 существует в таблице, так как у вас есть primary key on AddressID, вы не можете вставлять повторяющиеся значения.

Попробуйте этот запрос для вставки в таблицу

INSERT INTO [dbo].[Address] (Street,City,State,ZipCode) SELECT Street,City,State,ZipCode FROM ( VALUES (1,’2400 Broadway’,’New York’,’NY’,11201), (2,’320 21st Street’,’Atlanta’,’GA’,303), (3,’439 Skyline Blvd’,’Seattle’,’WA’,98101), (4,’56 Park Avenue’,’Dallas’,’TX’,75201)) v(addressid, street, city, state, zipcode) WHERE NOT EXISTS (SELECT 1 FROM [dbo].[address] A WHERE a.addressid = v.addressid)

Если столбцы AddressID имеют свойство identity, то удалите столбец AddressID из списка столбцов insert и select.

Ответ №2

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

Подумайте о Первичном ключе как уникальном идентификаторе для каждой строки. Дублированная ошибка ключа сообщает вам, что у вас уже есть строка в вашей адресной таблице, которая имеет значение AddressID 1. Чтобы избежать этих ошибок, вы должны установить столбец AddressID в IDENTITY и не беспокоиться о настройке значения. Попробуйте вставить свои записи без установки AddressID. Что-то вроде этого:

INSERT INTO [dbo].[Address] (Street,City,State,ZipCode) VALUES (‘2400 Broadway’,’New York’,’NY’,11201), (‘320 21st Street’,’Atlanta’,’GA’,303), (‘439 Skyline Blvd’,’Seattle’,’WA’,98101), (’56 Park Avenue’,’Dallas’,’TX’,75201) (’56 Park Avenue’,’Dallas’,’TX’,75201); GO Ответ №3

Что вы делаете неправильно:

  • У вас уже есть AddressId (1) в таблице Address.
    Первичный ключ должен быть уникальным. Вы не можете вставлять повторяющиеся значения в столбец primary key.

Что вы, вероятно, можете сделать, это:

  • update существующее значение и insert новые значения. Это значит обновить строку с помощью AddressId 1 и вставить новые строки с новыми AddressIds.

Лучше вы разрешите Sql Server принять решение о своем первичном ключевом значении, создав “столбец идентификации”. Вы можете создать столбец идентификатора при создании таблицы следующим образом:

CREATE TABLE [dbo].[Address] ( [AddressId] [int] IDENTITY(1,1) NOT NULL, [OtherColumns] [int] NULL, CONSTRAINT [PK_Address] PRIMARY KEY CLUSTERED (AddressId ASC) )

Обратите внимание, что если вы создали таблицу с Idenity column, вам не нужно указывать какие-либо значения во время операции insert, потому что Sql Server неявно создает и вставляет эти значения для вас.

Оцените статью
Добавить комментарий