在 MS SQLServer 中交换两行保留原始主键且无需手动更新

Posted

技术标签:

【中文标题】在 MS SQLServer 中交换两行保留原始主键且无需手动更新【英文标题】:Swapping two rows in MS SQLServer retaining the original primary key and without manual update 【发布时间】:2009-01-27 16:17:51 【问题描述】:

我有以下问题:我有像

这样的行
ID   CODE     NAME            .........
1    h1100h1  Cool example1   .........
2    h654441  Another cool1   .........

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

【问题讨论】:

【参考方案1】:

我没有对此进行测试,但我认为它会起作用。我假设 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】:

自行加入更新是您唯一安全的选择

【讨论】:

以上是关于在 MS SQLServer 中交换两行保留原始主键且无需手动更新的主要内容,如果未能解决你的问题,请参考以下文章

sql语句查询出的两行数据除了主键其他都一样,怎么去掉重复数据

怎样将ms sql的主键设置为每次自增加1

[ZJOI2007]矩阵游戏

ZJOI2007矩阵游戏

[ZJOI2007]矩阵游戏

1059: [ZJOI2007]矩阵游戏