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

在MS SQLServer中交换两行,保留原始主键,不进行手动更新

  •  3
  • Shiva  · 技术社区  · 15 年前

    我有以下问题:我有这样的行

    ID   CODE     NAME            .........
    1    h1100h1  Cool example1   .........
    2    h654441  Another cool1   .........
    

    我想交换它们,保留所有旧的主键和约束。当然,我可以通过更新行轻松地手动解决这个问题。我有点想知道是否有人有任何优秀的解决方案来解决这类问题,而不仅仅是手动执行update命令。我真的很欣赏任何建议或建议。

    2 回复  |  直到 12 年前
        1
  •  6
  •   Tom H    15 年前

    我还没有测试过这个,但我认为它会起作用。我假设ID是单列主键。如果不是这样,那么您需要稍微调整这个代码来处理pk。

    UPDATE
         T1
    SET
         column_1 = T2.column_1,
         column_2 = T2.column_2,
         ...
    FROM
         dbo.My_Table T1
    INNER JOIN dbo.My_Table T2 ON
         T2.id =
              CASE
                   WHEN T1.id = @id_1 THEN @id_2
                   WHEN T1.id = @id_2 THEN @id_1
                   ELSE NULL
              END
    WHERE
         T1.id IN (@id_1, @id_2)
    
        2
  •  -1
  •   SQLMenace    15 年前

    带更新的自我加入是您唯一安全的赌注