У нас есть веб-приложение на основе ASP.NET/MSSQL, которое генерирует заказы с последовательными номерами заказов.
Когда пользователь сохраняет форму, новый заказ создается следующим образом:
- ВЫБЕРИТЕ MAX(order_number) FROM order_table, назовите это max_order_number
- установить new_order_number = max_order_number + 1
- ВСТАВЬТЕ новую запись заказа с этим new_order_number (это просто поле в записи заказа, а не ключ базы данных)
Если я включу вышеуказанные 3 шага в одну транзакцию, предотвратит ли это создание повторяющихся номеров заказов, если два клиента сохранят новый заказ одновременно? (И допустим, система в конечном итоге находится на веб-ферме с несколькими серверами IIS и одним сервером MSSQL).
Я хочу, чтобы два клиента не выбрали один и тот же MAX(order_number) из-за параллелизма где-то в системе.
Какой уровень изоляции следует использовать? Спасибо.