Обновить первичный ключ из таблицы в другой базе данных - PullRequest
2 голосов
/ 28 июня 2010

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

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, чтобы не обновлять какие-либоЗначение db1 pcol, существовавшее в db2 pcol, оно вообще ничего не обновляло, похоже, оно пытается обновить с помощью первичного ключа в db1 вместо db2.

any и вся помощь очень ценится!

// исправлена ​​незначительная орфографическая ошибка:)

Ответы [ 2 ]

3 голосов
/ 28 июня 2010

Если честно, сказать особо нечего - сообщение об ошибке в значительной степени описывает, в чем дело.

Вы пытаетесь обновить столбец PK до уже существующего значения.

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

  1. , присоединившись к 2ndIdent, вы не создаете дубликатов.
  2. действительно нет дубликатов в таблицах на DB1 и DB2

Ваш SQL выглядит нормально, поэтому проблема с данными должна быть.

Чтобы проверить наличие дубликатов, вы можете использовать что-то вроде этого:

Select 2ndIndent
From Table
Group By 2ndIdent
Having Count(2ndIndent) > 1
0 голосов
/ 28 июня 2010

"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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...