Лучший способ избежать грязного чтения в SQL-сервере
В других сообщениях я обнаружил, что на сервере 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
Есть ли другой эффективный способ???
ОБНОВИТЬ
Я просто делаю эти обновления в DUMMYCOLUMN, чтобы никакая другая транзакция не могла прочитать BALANCE of ACCOUNT 'XXXXXXXXX', пока текущая транзакция не будет зафиксирована. Моя цель - прочитать БАЛАНС СЧЕТА "XXXXXXXXX", выполнить некоторые проверки и обновить БАЛАНС. Если я пропущу первое обновление, то во время моей транзакции другая транзакция будет читать BALANCE. Я предотвращаю это, блокируя строку с помощью UPDATE, и хочу знать, есть ли другие способы блокировки строки без обновления этой строки?