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