Обновить первичный ключ из таблицы в другой базе данных
У меня две идентичные таблицы в двух разных базах данных с одинаковыми данными, но у них разные первичные ключи, мне нужно обновить их, чтобы они имели одинаковый ключ, поэтому я убедился, что ни одна из таблиц не имеет общего ключа и что не было дубликатов
UPDATE db1.dbo.Table
SET db1.dbo.Table.pcol = rightPcol.pcol
FROM db1.dbo.Table
JOIN db2.dbo.Table AS rightPcol ON db1.dbo.Table.2ndIdent = db2.dbo.Table.2ndIdent
это, однако, приводит к "Нарушению ограничения PRIMARY KEY. Невозможно вставить дубликат ключа в объект"
при добавлении предложения where, чтобы не обновлять значение pcol db1, существовавшее в pcol db2, оно вообще ничего не обновляло, похоже, что оно пытается обновить с помощью первичного ключа в db1 вместо db2.
любая помощь очень ценится!
// исправлена небольшая орфографическая ошибка:)
2 ответа
Если честно, сказать особо нечего - сообщение об ошибке в значительной степени описывает, в чем дело.
Вы пытаетесь обновить столбец PK до значения, которое уже существует.
Я бы дважды проверил, чтобы убедиться, что
- присоединяясь к 2ndIdent, вы не создаете никаких дубликатов.
- в таблицах на DB1 и DB2 действительно нет дубликатов
Ваш SQL выглядит нормально, поэтому он должен быть проблемой с данными.
Чтобы проверить наличие дубликатов, вы можете использовать что-то вроде этого:
Select 2ndIndent
From Table
Group By 2ndIdent
Having Count(2ndIndent) > 1
"Pcol" - это столбец первичного ключа?
Вы получаете "Нарушение ограничения первичного ключа", когда первичный ключ из "rightPcol" дублируется с любой строкой в таблице в "db1". Вы должны выбрать дублирование из двух таблиц и разрешить конфликт (способ его повторного выбора зависит от того, что вы не указали).
Итак, сначала вы должны выбрать дубликаты:
SELECT T1.pcol
FROM db1.dbo.Table.pcol AS T1
INNER JOIN db2.dbo.Table.pcol AS T2
ON T1.pcol = T2.pcol