2012-07-16 24 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

相關問題