Как избежать получения ошибки «дублирующая запись« 1 »для основного ключа» при вставке одной таблицы в другую? - PullRequest
0 голосов
/ 17 мая 2019
INSERT INTO tableA (SELECT * FROM tableB);

создает ошибку

"Дублирующая запись '1' для ключа Primary".

tableA имеет поле «Крышка», которое является основным, с автоинкрементом и вызывает ошибку.

tableB имеет набор записей с идентичными полями для tableA. Крышка поля пронумерована 1-40.

Мне нужно, чтобы ВСЕ записи из таблицы B добавлялись в таблицу A каждый раз, когда новый пользователь входит в мою систему. После копирования в TableA записи обновляются с этим идентификатором пользователя UserID. Когда таблица B добавляется к таблице A, поле tableA.Lid должно автоматически увеличиваться, а не извлекать дублирующее значение из таблицы B.

Следующее работает, но я хочу избежать указания имен полей в коде:

INSERT INTO tableA (field2, field3,...) SELECT field2, field3, ... FROM tableB

Я пропускаю field1, которое является основным полем автоинкремента "Lid".

Если бы я установил tableB.Lid в null, это сработало бы?

Я хочу использовать INSERT INTO tableA (SELECT * FROM tableB), поскольку это позволяет избежать указания имен полей в коде.

1 Ответ

0 голосов
/ 20 мая 2019

В таблице B я изменил поле «Крышка» на обычное поле INT, не индексируемое, не первичное, не с автоматическим приращением, по умолчанию равно Null. Теперь я могу "INSERT INTO tableA SELECT * FROM tableB", и все записи в таблице A автоматически увеличиваются автоматически. Как уже упоминалось, я предпочел не использовать имена полей в коде, поэтому хотел, чтобы решение было «универсальным».

...