代码之家  ›  专栏  ›  技术社区  ›  Joakim

从另一个数据库中的表更新主键

  •  2
  • Joakim  · 技术社区  · 16 年前

    我在两个不同的数据库中有两个相同的表,它们具有相同的数据,但是它们具有不同的主键,我需要更新这些表,使它们具有相同的键,所以我所做的是确保没有一个表具有任何共同的键,并且没有重复的键

    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
    

    但是,这会导致“违反主键约束”。“无法在对象中插入重复键”

    当添加where子句以不更新db2pcol中存在的任何db1pcol值时,它根本不更新任何内容,看起来它确实尝试使用db1中的主键而不是db2中的主键进行更新。

    非常感谢您的帮助!

    //修复了较小的拼写错误:)

    2 回复  |  直到 16 年前
        1
  •  3
  •   codingbadger    16 年前

    老实说,没有什么好说的-错误消息基本上描述了什么是错误的。

    您正在尝试将PK列更新为已存在的值。

    我会仔细检查以确保

    您的SQL看起来很好,所以它一定是数据的问题。

    要检查重复项,可以使用以下方法:

    Select 2ndIndent
    From Table
    Group By 2ndIdent
    Having Count(2ndIndent) > 1
    
        2
  •  0
  •   TcKs    16 年前

    “pcol”是主键列吗?

    当“rightPcol”中的主键与“db1”表中的任何行重复时,就会得到“违反主键约束”。您应该从两个表中选择Duplication并解决冲突(冲突的解决方式取决于您没有指定的其他内容)。

    SELECT T1.pcol
    FROM db1.dbo.Table.pcol AS T1
    INNER JOIN db2.dbo.Table.pcol AS T2
        ON T1.pcol = T2.pcol