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で「一度に」行われるため、次のようにして 2 つの列の値を直接交換することもできます。

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