Добавление (Nolock) После всех инструкций Select во всех хранимых процедурах путем написания сценария на T-SQL

#tsql

#tsql

Вопрос:

У меня много хранимых процедур в базе данных, и если в хранимых процедурах есть состояния select, я хочу добавить (Nolock) после всех этих инструкций select, написав скрипт.

Я могу получить все хранимые процедуры, используя таблицы cursor и sys, но я не понял, как точно найти выбранные состояния и добавить nolock после них.

Мне нужны ваши хорошие идеи.

Заранее спасибо,

Ответ №1:

Хммм… Я бы этого не делал; добавление NOLOCK везде — это антишаблон SQL.

Есть другие способы добиться того же эффекта:

  1. Отрегулируйте уровень изоляции транзакций для ваших приложений, которые вызывают вашу базу данных, и установите для них значение READ UNCOMMITTED , которое будет иметь тот же эффект, что и добавление NOLOCK ко всем вашим SELECT инструкциям… Смотрите: http://msdn.microsoft.com/en-us/library/ms189542.aspx

  2. Или реализовать READ COMMITTED SNAPSHOT режим для всей базы данных: http://msdn.microsoft.com/en-us/library/ms345124(v=sql.90).aspx

Фактически, наш собственный Джефф Этвуд написал о той же проблеме, которую вы, вероятно, пытаетесь решить здесь:http://www.codinghorror.com/blog/2008/08/deadlocked.html

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

Комментарии:

1. NOLOCK действительно, это то, что можно использовать только в особых обстоятельствах.