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

Является ли "SET NOCOUNT OFF" необходимым в хранимой процедуре?

У меня есть много процедур с set nocount on.

Нужно ли отключать его в конце хранимой процедуры?

например:.

create procedure DummyProc
as
begin
    set nocount on
    ...
    set nocount off
end
4b9b3361

Ответ 1

set nocount on отключит сообщение SQL X rows affected.. Это сообщение в некоторых случаях подавляется из-за нежелательных эффектов с клиентом, выполняющим хранимую процедуру.

set nocount off отменяет это подавление. Однако set nocount on является параметром области видимости и по умолчанию будет отключен при выходе из области.

Теперь, требуется set nocount off? Нет, поскольку любые новые выполненные команды будут в другой области, и по умолчанию set nocount off всегда действует. Но, как указано выше в комментариях, он рассмотрел хорошую практику, просто чтобы явно указать, что этот параметр вернется к нормальному состоянию, когда proc завершит выполнение.

Ответ 2

только если вы не хотите видеть

(1 row(s) affected) // or n rows....

большую часть времени - при отладке

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

изменить

Это не влияет на результат запроса (вкл. или выкл. - это не имеет значения.) - если это то, что вы просите. (спасибо JNK).

Ответ 3

Я знаю, что это довольно старый пост, но это был первый хит в Google, когда я искал ответ. Ответ выше, чтобы проверить это было очень хорошей идеей.

Я проверил это и хотел обновить выше некоторые дополнительные сведения.

Область, которую вы создаете с помощью SET NOCOUNT ON, переносится на любой процесс, который вызывает ваша процедура. Поэтому, если ваша процедура делает SET NOCOUNT ON, а затем вы вызываете sproc, этот sproc получает настройку SET NOCOUNT. Настройка выключается, когда вы выходите из своего sproc, но параметр стекает вниз в вызываемые sprocs. Если вы установили NOCOUNT внутри sproc, CALED, у внешнего sproc будет установлен SET NOCOUNT, который он установит, а внутренний sproc не повлияет на внешний sproc.

Поэтому я думаю, что вам действительно не нужно reset в конце вашего sproc, потому что ваши настройки никогда не будут течь из вашего sprop вверх; однако, если ваш sproc зависит от настройки, он должен установить его, прежде чем он понадобится, потому что, если он вызван из другого sproc, он может иметь другую настройку, чем вы предполагаете.