2009-01-27 16 views
3

我有以下问题:我有一个像交换两行MS SQLServer的保留原来的主键,无需手动更新

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

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

回答

6

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

非常感谢。你的是我认为比我目前解决这个问题要好。您的查询工作正常。 – Shiva 2009-01-27 20:09:13

-1

加入更新是你唯一的安全投注