0

我正在尝试对表中的几个字段执行更新,以切换它们的值(由于生成数据的软件中的一些错误逻辑,这超出了我的控制范围)。

我将使用的查询如下所示:

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

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

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

4

1 回答 1

1

是的。

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

会正常工作。从概念上讲,赋值在 SQL中“一次全部”发生,因此以下操作也可以直接交换两个列值。

UPDATE myTable
SET    ColumnA = ColumnB,
       ColumnB = ColumnA 
WHERE  myConditions 
于 2012-07-16T09:45:42.613 回答