これは非常に単純な質問ですが、SQL Server のドキュメントでは、これについて私が望むほど明確に説明されていません。
スプレッドシートに基づいて新しい値でテーブルを更新しています。つまりUPDATE
、1 つのクエリで複数のステートメントを使用しています。
UPDATE Asset SET AssetID = 'NewID' WHERE AssetID = 'OldID'
これは基本的なクエリですが、NewID と OldID の代わりに実際の ID 番号を使用しているため、クエリ全体は次のようになります。
UPDATE Asset SET AssetID = '001' WHERE AssetID = '111'
UPDATE Asset SET AssetID = '002' WHERE AssetID = '112'
UPDATE Asset SET AssetID = '003' WHERE AssetID = '113'
私が懸念している問題は、SQL がこれらのフィールドを更新する順序と、WHERE
句で使用する値によっては、うっかり複数の行を更新してしまう場合があることです。
例えば:
UPDATE Asset SET AssetID = '001' WHERE AssetID = '111'
UPDATE Asset SET AssetID = '002' WHERE AssetID = '001'
UPDATE Asset SET AssetID = '003' WHERE AssetID = '002'
上記のクエリを実行する前に、次のテーブルがあるとします。
AssetID
111
001
002
私がしたいのは、ステートメントのWHERE
句で、列が現在持っているもの、つまりクエリを実行する前に使用中のものだけを使用することです。UPDATE
AssetID
ID
これにより、次の表が得られます。
AssetID
001
002
003
私が心配しているのは、実際に更新が順番に処理さID
れ、WHERE
節で更新されたものを使用することです。つまり、私のテーブルは代わりに次のようになります。
AssetID
003
003
003
さて、これに関する調査中に、SQL Serverがこれをどのように処理するかについてのドキュメントを見つけることができました-それはUPDATED値を使用することです. この動作は「Normal SQL」の処理方法とは異なると記載されているため、SQL Server を使用する際にこれが問題にならないことを願っています。
誰か確認できますか?