sql - 在保留原始主键且无需手动更新的情况下交换 MS SQLServer 中的两行

标签 sql sql-server constraints sql-update

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

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

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

最佳答案

我还没有测试过这个,但我认为它会起作用。我假设 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)

关于sql - 在保留原始主键且无需手动更新的情况下交换 MS SQLServer 中的两行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/484040/

相关文章:

php - SQL索引/关系

SQL - 如果数组包含特定项目则过滤行

swift - 创建一个函数来将 uiimageview 嵌套在 uiview 上

algorithm - 解决具有额外约束的分区的正确算法是什么?

php - Cakephp MYSQL查询: SELECT where date is greater than

java - Spring Boot 和 PostgreSQL 中文件 data.sql 中错误的 SQL 语句语法

sql-server - T-SQL - 仅当行尚不存在时才在表中插入行

sql - 动态 SQL 传递表名并返回最大 ID 值

sql - SQL Server 的 WHERE 子句中的空格

postgresql - 将 UNIQUE 约束转换为 CHECK 或触发器