Использовать транзакции для выбора операторов? - PullRequest
41 голосов
/ 12 мая 2011

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

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

Ответы [ 2 ]

44 голосов
/ 12 мая 2011

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

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

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

4 голосов
/ 12 мая 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...