2010-06-28 64 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

相关问题