Не уверен, почему вы не заключаете финансовые транзакции в транзакции базы данных (например, когда вы переводите средства с одного счета на другой - вы не совершаете одну сторону транзакции за раз - именно поэтому существуют явные транзакции) , Даже если ваш код предназначен для бизнес-транзакций в том виде, в каком он есть, все транзакционные базы данных могут выполнять неявные откаты в случае ошибок или сбоев. Я думаю, что эта дискуссия у вас над головой.
Если у вас есть проблемы с блокировкой, реализуйте управление версиями и очистите ваш код.
Без блокировки не только возвращает неправильные значения, но и возвращает фантомные записи и дубликаты.
Это распространенное заблуждение, что это всегда заставляет запросы выполняться быстрее. Если в таблице нет блокировки записи, это не имеет значения. Если в таблице есть блокировки, это может сделать запрос быстрее, но есть причина, по которой блокировки были изобретены в первую очередь.
Справедливости ради, вот два особых сценария, в которых подсказка nolock может предоставить полезность
1) База данных SQL Server до 2005 года, которая должна выполнять длинный запрос к действующей базе данных OLTP, это может быть единственный способ
2) Плохо написанное приложение, которое блокирует записи и возвращает управление пользовательскому интерфейсу и читателям, блокируется на неопределенный срок. Nolock может быть полезен в этом случае, если приложение не может быть исправлено (сторонние и т. Д.), А база данных - до 2005 года, или управление версиями не может быть включено.