我在两个不同的数据库中有两个相同的表,它们具有相同的数据但是它们具有不同的主键,我需要更新它们以便它们具有相同的键,所以我所做的是确保没有任何表具有任何键共同的,并没有重复
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进行更新。
非常感谢任何和所有帮助!
//修复了轻微的拼写错误:)
答案 0 :(得分:3)
说实话,没有太多可说的 - 错误信息几乎描述了它的错误。
您正在尝试将PK列更新为已存在的值。
我会仔细检查以确保
您的SQL看起来很好,所以它必须是数据的问题。
要检查重复项,您可以使用以下内容:
Select 2ndIndent
From Table
Group By 2ndIdent
Having Count(2ndIndent) > 1
答案 1 :(得分: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