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