2010-06-28 62 views
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約束的衝突。不能在對象中插入重複鍵」

添加where子句時不更新db2 pcol中存在的任何db1 pcol值,它根本沒有更新任何內容,它看起來像嘗試使用db1中的主鍵而不是db2更新。

任何和所有的幫助,非常感謝!

//固定次要拼寫錯誤:)

回答

3

說實話沒有什麼好說的 - 錯誤信息幾乎描述什麼是錯。

您正嘗試將PK列更新爲已存在的值。

我會仔細檢查通過加入對2ndIdent沒有創建任何重複,以確保

  1. 真的沒有在DB1和DB2

你的SQL看起來很好,所以它必須與數據的問題表中的任何重複。

要重複檢查,你可以使用這樣的事情:

Select 2ndIndent 
From Table 
Group By 2ndIdent 
Having Count(2ndIndent) > 1 
+0

顯然2ndIdent不得不重複它,即使高級程序員說沒有這讓我連看都不看那裏,非常感謝你爲你的幫幫我。 – Joakim 2010-06-28 08:18:13

0

的「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 
+0

我這樣做了,但這不是問題,但Barry發現了這個問題。感謝您嘗試提供幫助。 – Joakim 2010-06-28 08:21:54

相關問題