Показать сообщение отдельно
Старый 09.10.2019, 17:20   #44  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,651 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от NitroJunkie Посмотреть сообщение
То есть можно включить уровень изоляции SNAPSHOT и MS SQL сам будет проверять версии записей и кидать update conflict'ы. И это будет по идее ровно то что делает Axapta на прикладном уровне (и по идее быстрее).

Блокировок при этом не будет (в этом собственно и смысл версионного режима).
О режимах изоляции в MS SQL имеет смысл говорить только в рамках открытой транзакции. Если транзакции нет, то и разговаривать не о чем

В этом свете Ваше предположение означает, что необходимо открыть транзакцию в момент выборки. А потом долго ждать, пока пользователь надумает внести какие-то изменения. А когда наконец дождались, то, поскольку транзакцию закрыли, придется заново сделать перезапрос всех данных для актуализации снимка.

Да и разрешение конфликта - это тоже перезапрос. При этом не конкретной записи, а вообще всего снимка. Т.е. вообще всех отображенных данных.

Как-то это все слишком накладно получается...


Режим изоляции - это не есть глобальный режим работы SQL. Это "ситуационная" (сиюминутная) настройка. Даже не соединения, а одной конкретной транзакции. Может быть изменена в рамках одной процедуры несколько раз.

Да, возможна настройка по умолчанию. Но! По прежнему в рамках транзакции. А приложение так не работает. Операция чтения, как правило, сильно отдалена от операции записи по времени. По этой причине включить их в одну транзакцию просто невозможно.

Можно, конечно, использовать этот прием именно в процедурах. Но стоит ли реализовывать два принципиально разных механизма разрешения конфликтов совместного доступа в рамках одного приложения?
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: sukhanchik (3).