#tsql
#tsql
Вопрос:
У меня много хранимых процедур в базе данных, и если в хранимых процедурах есть состояния select, я хочу добавить (Nolock) после всех этих инструкций select, написав скрипт.
Я могу получить все хранимые процедуры, используя таблицы cursor и sys, но я не понял, как точно найти выбранные состояния и добавить nolock после них.
Мне нужны ваши хорошие идеи.
Заранее спасибо,
Ответ №1:
Хммм… Я бы этого не делал; добавление NOLOCK
везде — это антишаблон SQL.
Есть другие способы добиться того же эффекта:
-
Отрегулируйте уровень изоляции транзакций для ваших приложений, которые вызывают вашу базу данных, и установите для них значение
READ UNCOMMITTED
, которое будет иметь тот же эффект, что и добавлениеNOLOCK
ко всем вашимSELECT
инструкциям… Смотрите: http://msdn.microsoft.com/en-us/library/ms189542.aspx -
Или реализовать
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
действительно, это то, что можно использовать только в особых обстоятельствах.