2012-07-16 42 views
0

我试图通过我的表中的几个字段执行更新,以便切换它们的值(由于该软件中的某些错误逻辑生成数据,这是我的contorol)。使用列作为单个更新查询的源和目标

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

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

是的。

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

会正常工作。从概念上讲,SQL中的分配发生在"all at once",所以下面的方法也可以直接交换两列值。

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

非常直白,谢谢。 – Alex 2012-07-16 10:14:53