Требуется ли «SET NOCOUNT OFF» в хранимой процедуре? - PullRequest
36 голосов
/ 21 ноября 2011

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

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

например:.

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

Ответы [ 3 ]

38 голосов
/ 21 ноября 2011

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

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

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

5 голосов
/ 14 апреля 2016

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

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

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

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

4 голосов
/ 21 ноября 2011

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

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

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

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

редактировать

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

...