2

同じデータを持つ2つの異なるデータベースに2つの同一のテーブルがありますが、主キーが異なります。これらを更新して同じキーを持つようにする必要があるため、どのテーブルにも共通のキーがないことを確認し、重複がないこと

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 制約に違反しています。オブジェクトに重複キーを挿入できません」という結果になります。

db2 pcol に存在する db1 pcol 値を更新しないように where 句を追加すると、何も更新されず、db2 ではなく db1 の主キーで更新しようとしているように見えます。

ありとあらゆる助けが大歓迎です!

//マイナーなスペルミスを修正:)

4

2 に答える 2

3

正直なところ、言うことはあまりありません。エラー メッセージには、何が問題なのかがほとんど説明されています。

PK 列を既存の値に更新しようとしています。

私はそれを確認するために再確認します

  1. 2ndIdent に参加することで、重複を作成することはありません。
  2. DB1 と DB2 のテーブルに重複はありません。

あなたのSQLは問題ないように見えるので、データに問題があるはずです。

重複をチェックするには、次のようなものを使用できます。

Select 2ndIndent
From Table
Group By 2ndIdent
Having Count(2ndIndent) > 1
于 2010-06-28T08:03:38.417 に答える
0

「pcol」は主キー列ですか?

「rightPcol」の主キーが「db1」のテーブルの行と重複している場合、「主キー制約違反」が発生します。2 つのテーブルから複製を選択し、競合を解決する必要があります (競合を解決する方法は、指定していない他のものに依存します)。

したがって、最初に重複を選択する必要があります。

SELECT T1.pcol
FROM db1.dbo.Table.pcol AS T1
INNER JOIN db2.dbo.Table.pcol AS T2
    ON T1.pcol = T2.pcol
于 2010-06-28T08:05:25.830 に答える