2016-03-29 20 views
0
Update tmp 
SET BakColumn1 = Column1 
,Column1 = Column1 + ' Changed Value' 

MS-SQL 2008以上のバージョンで私のステートメントが上記のような場合は、必ずバックアップ列(BakColumn)にColumn1元の内容を取得する保証はありますか?そうでない場合は、別の方法で2つのトランザクションを実行する必要がありますか?SQLの列を更新する順序

並列度(MAX-DOP)が1より高いと問題が発生する可能性がありますか?

+0

テストするときに何が起きても、毎回何が起こるのでしょうか。 –

+0

@TabAlleman私はDoPがここでプレーする役割を持っていると思うので、誰かがこれを試したか、具体的な回答があるかどうか確認したいのです – Asha

+4

私の理解は、アップデートがアトミックな操作として扱われ、常に正しい値が使用されます。並列性の程度は、更新プログラムのアトミック性のために重要ではありません。私はまだ良いリファレンスを見つけていないが、私はこれについて間違っているかもしれない。 – jpw

答えて

0

はい[バックアップ]列に常にColumn1元のコンテンツが表示されることが保証されています。

オーダーは関係ありません。

このため、列間の値の入れ替えを確認し、結果を確認することができます。

Update tmp 
SET BakColumn1 = Column1 
,Column1 =BakColumn1 

ここのキーは、行の元の値が一時的に維持され、全体的に参照されていると思います。

並列性はパフォーマンスの向上のみを目的としており、機能的な動作を変更しません。 DOPを使用して不一致が確認された場合は、バグを報告することができます:

関連する問題