他の投稿で、SQLサーバーでは読み取りを別の読み取りでロックできないことがわかりました。だから私は次のようにします
BEGIN TRAN
-- I used this update to lock specific row
UPDATE TBL_BALANCE SET TBL_BALANCE.DUMMYCOLUMN = 1 SET WHERE TBL_BALANCE.ACCOUNT = 'XXXXXXXXX'
SELECT BALANCE FROM TBL_BALANCE WHERE TBL_BALANCE.ACCOUNT = 'XXXXXXXXX'
-- Do Some validations over BALANCE
-- Do some update on BALANCE
-- I used this update to lock specific row when next transaction occur by setting DUMMYCOLUMN = 1
UPDATE TBL_BALANCE SET TBL_BALANCE.DUMMYCOLUMN = 0 SET WHERE TBL_BALANCE.ACCOUNT = 'XXXXXXXXX'
COMMIT TRAN
他の効率的な方法はありますか?
アップデート
現在のトランザクションがコミットされるまで、他のトランザクションが ACCOUNT 'XXXXXXXXX' の BALANCE を読み取ることができないように、DUMMYCOLUMN でこれらの更新を行うだけです。私の目的は、アカウント「XXXXXXXXX」の残高を読み取り、いくつかの検証を行い、残高を更新することです。最初の更新を省略すると、トランザクション中に別のトランザクションで BALANCE が読み取られます。UPDATE によって行をロックすることでこれを防ぎ、その行を更新せずに行をロックする他の方法があるか知りたいですか?