使用列作为单个更新查询的源和目标

时间:2012-07-16 09:03:50

标签: sql-server-2008 transactions

我正在尝试对我的表中的几个字段执行更新,以便切换它们的值(感谢生成数据的软件中的一些错误逻辑,这是我的contorol之外的。) / p>

我使用的查询看起来像这样:

BEGIN TRANSACTION
SET @MyQuery = 'UPDATE myTable SET ColumnA = ColumnB, ColumnB = ColumnC WHERE myConditions'
EXEC @MyQuery
COMMIT TRANSACTION

或者,它看起来像这样:

BEGIN TRANSACTION
SET @MyQuery = 'UPDATE myTable SET ColumnA = ColumnB WHERE myConditions'
SET @MyQuery2 = 'UPDATE myTable SET ColumnB = ColumnC WHERE myConditions'
EXEC @MyQuery
EXEC @MyQuery2
COMMIT TRANSACTION

我非常确定拆分查​​询可以保证我想要的结果,但如果我可以安全地假设单个查询是可靠的,那么它将更容易(更少全面编辑)。

前一个查询是否会获得与后者相同的结果?

1 个答案:

答案 0 :(得分:1)

UPDATE myTable
SET    ColumnA = ColumnB,
       ColumnB = ColumnC
WHERE  myConditions 

会正常工作。从概念上讲,分配在SQL中发生"all at once",因此以下内容也可以直接交换两个列值。

UPDATE myTable
SET    ColumnA = ColumnB,
       ColumnB = ColumnA 
WHERE  myConditions