SQL Нарушение первичного ключа SERVER 2017 при повторной вставке ранее удаленной строки - PullRequest
0 голосов
/ 22 апреля 2020

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

DELETE myTABLE WHERE data1='0'

Строки были удалены, и я запустил запрос, чтобы проверить себя.

Однако я попытался вставить строки обратно в myTABLE с использованием ...

INSERT INTO myTABLE (pkval1, pkval2, data1, data2)
SELECT srcVal1, srcVal2, srcData1, srcData2
FROM mySourceTable

В mySourceTable столбцы srcVal и srcVal2 образуют уникальный индекс, но не являются первичным ключом.

В результате возникла ошибка:

Нарушение ограничения PRIMARY KEY 'PK_MYTABLE' Невозможно вставить дубликат ключа в объект 'dbo.myTable'. Дублирующее значение ключа: {значение в srcVal2}

Я просмотрел все значения ключей в mySourceTable, и они были действительны.

Вопрос: Если я удалил строки, почему я не смог бы их заново вставить?

У меня никогда не было этой проблемы за многие годы программирования SQL. Но я устал и уверен, что слеп к чему-то простому.

1 Ответ

0 голосов
/ 22 апреля 2020

Проблема была в mySourceTable. Хотя srcVal1 + srcVal2 выдает уникальные значения индекса, в myTABLE для pkval2 был уникальный индекс. Я не мог видеть лес за деревьями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...