我想在Microsoft SQL Server中的两个不同的行中交换列的值

adh*_*lon 4 t-sql sql-server

我想在Microsoft SQL SERVER中执行以下两个SQL查询

UPDATE Partnerships SET sortOrder = 2 WHERE sortOrder = 1;
UPDATE Partnerships SET sortOrder = 1 WHERE sortOrder = 2;
Run Code Online (Sandbox Code Playgroud)

唯一的问题是,我不允许sortOrder包含相同的值,它是一个唯一的键.我怎么能绕过这个,因为第一个查询违反了唯一的密钥规则并终止了?或者我是否必须摆脱我所拥有的独特关键规则?

谢谢!

gbn*_*gbn 13

使用CASE并一次完成两行.每个过滤器键值需要一个CASE子句:

UPDATE Partnerships
SET sortOrder = CASE WHEN sortOrder = 1 THEN 2 ELSE 1 END
WHERE sortOrder IN (1, 2)
Run Code Online (Sandbox Code Playgroud)

略显狡猾:

UPDATE Partnerships
SET sortOrder = 3-sortOrder
WHERE sortOrder IN (1, 2)
Run Code Online (Sandbox Code Playgroud)