Glen Childs Ответов: 5

Ошибка первичного ключа, не удается добавить дубликат записи


Привет,

Я импортировал CSV-файл в SQL, мастер добавил его в качестве новой таблицы.

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

Однако я получаю следующую ошибку.

Msg 2627, Level 14, State 1, Line 4
Violation of PRIMARY KEY constraint 'PK_Customer'. Cannot insert duplicate key in object 'dbo.Customer'. The duplicate key value is (105).
The statement has been terminated.


Это мое заявление:

INSERT INTO dbo.Customer
(custID,lastName,firstName,title,address1,address2,address3,postCode,email,fax)
SELECT ACCOUNT,SURNAME,FORENAMES,TITLE,ADD1,ADD2,ADD3,POSTCODE,EMAIL,FAX
FROM dbo.[NCCUST CSV FORMAT PFS 9.1.14];


Любой указатели было бы здорово :)

Спасибо

5 Ответов

Рейтинг:
43

Maciej Los

Первичный ключ (PK)[^] заключается в том, чтобы гарантировать уникальные данные, которые часто определяются в столбце идентификаторов.

Один реляционная база данных[^] использует PK

Вики писала:
В реляционной модели каждая схема таблицы должна идентифицировать столбец или группу столбцов, называемых первичным ключом, чтобы однозначно идентифицировать каждую строку. Затем можно установить связь между каждой строкой в таблице и строкой в другой таблице, создав внешний ключ, столбец или группу столбцов в одной таблице, которые указывают на первичный ключ другой таблицы. Реляционная модель предлагает различные уровни уточнения организации таблиц и реорганизации, называемые нормализацией базы данных. (См. нормализацию ниже.) Система управления базами данных (СУБД) реляционной базы данных называется СУБД и представляет собой программное обеспечение реляционной базы данных.


Не удаляйте никаких PK, если вы не хотите потерять отношения между таблицами!

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

INSERT INTO DestTable (<fields collection>)
SELECT <fields collection>
FROM SourceTable
WHERE DestTable.ID NOT IN (SELECT ID FROM SourceTable)

или использовать Существует заявление[^].


Karthik_Mahalingam

поздравление Мацей Лос для 100к

Maciej Los

Спасибо ;)

CHill60

5'd - единственное разумное решение дано!

Maciej Los

Спасибо, остынь ;)

Рейтинг:
2

joginder-banger

Удалите внешний ключ, как этот тип.

ALTER TABLE Table_Name
DROP FOREIGN KEY Foreign_Key_ID


Рейтинг:
2

Member 13653154

нарушение ограничения первичного ключа 'PK_LPresent', не удается вставить дубликатный ключ в объект 'dbo.LPresent'. Значение ключа дубликата равно (2), оператор был прерван переводом в Сомали


Рейтинг:
1

joginder-banger

если вы хотите ввести дубликат (записи)записи, то удалите первичный ключ. измените свой стол, как этот тип.

ALTER TABLE Table_Name
DROP CONSTRAINT PrimaryKey_Constaint


Glen Childs

Я не мог сбросить PK - Msg 2627, Уровень 14, состояние 1, строка 1
Нарушение ограничения первичного ключа 'PK_Customer'. Не удается вставить дубликат ключа в объект dbo.Клиент". Повторяющееся значение ключа: (105).
Заявление было прекращено.
Msg 3725, Уровень 16, Состояние 0, Строка 6
На ограничение 'PK_Customer' ссылается таблица 'Accounts', ограничение внешнего ключа 'FK_CustomerID'.
Msg 3727, Уровень 16, Состояние 0, Строка 6
Не мог отбросить стеснение. См. предыдущие ошибки

joginder-banger

ваш первичный ключ ссылается на внешний ключ... Удалить первый ключ.

Glen Childs

Спасибо, что их удаление сработало, но как я могу добавить ключи обратно? Поскольку мое приложение C# теперь не может получить доступ к данным в этих таблицах.

Рейтинг:
1

Deviprasad Das

Если вы не хотите, чтобы CustID заполнялся из csv-файла, то вы можете сделать это поле полем идентификации и использовать следующий запрос.

INSERT INTO dbo.Customer
(lastName,firstName,title,address1,address2,address3,postCode,email,fax)
SELECT SURNAME,FORENAMES,TITLE,ADD1,ADD2,ADD3,POSTCODE,EMAIL,FAX
FROM dbo.[NCCUST CSV FORMAT PFS 9.1.14];



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