我正在尝试对我的表中的几个字段执行更新,以便切换它们的值(感谢生成数据的软件中的一些错误逻辑,这是我的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
我非常确定拆分查询可以保证我想要的结果,但如果我可以安全地假设单个查询是可靠的,那么它将更容易(更少全面编辑)。
前一个查询是否会获得与后者相同的结果?
答案 0 :(得分:1)
是
UPDATE myTable
SET ColumnA = ColumnB,
ColumnB = ColumnC
WHERE myConditions
会正常工作。从概念上讲,分配在SQL中发生"all at once",因此以下内容也可以直接交换两个列值。
UPDATE myTable
SET ColumnA = ColumnB,
ColumnB = ColumnA
WHERE myConditions