Обновить первичный ключ из таблицы в другой базе данных

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

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 до значения, которое уже существует.

Я бы дважды проверил, чтобы убедиться, что

  1. присоединяясь к 2ndIdent, вы не создаете никаких дубликатов.
  2. в таблицах на 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
Другие вопросы по тегам