Подтвердить что ты не робот

Использовать транзакции для отдельных операторов?

Я не часто использую хранимые процедуры и задаюсь вопросом, имеет ли смысл обернуть мои запросы в транзакции.

Моя процедура имеет три простых запроса выбора, два из которых используют возвращаемое значение первого.

4b9b3361

Ответ 1

В высококонкурентном приложении может (теоретически) произойти, что данные, которые вы прочитали в первом выборе, были изменены до того, как будут выполнены другие варианты.

Если это ситуация, которая может возникнуть в вашем приложении, вы должны использовать транзакцию, чтобы обернуть ваши выборки. Убедитесь, что вы выбрали правильный уровень изоляции эту статью о параллельных решениях для обновления/вставки (aka upsert). Он ставит несколько общих методов повышения эффективности теста, чтобы увидеть, какой метод фактически гарантирует, что данные не изменяются между оператором select и next. Результаты, ну, шокирующие, я бы сказал.

Ответ 2

Транзакции обычно используются, когда у вас есть операторы CREATE, UPDATE или DELETE и вы хотите иметь атомарное поведение, то есть либо фиксировать все, либо ничего.

Тем не менее, вы можете использовать транзакцию для READ операторов выбора для:
Убедитесь, что никто другой не может обновить интересующую вас таблицу, пока выполняется ваш запрос select.

Посмотрите на этот пост MSDN.