У меня есть много процедур с set nocount on
.
Нужно ли отключать его в конце хранимой процедуры?
например:.
create procedure DummyProc
as
begin
set nocount on
...
set nocount off
end
У меня есть много процедур с set nocount on
.
Нужно ли отключать его в конце хранимой процедуры?
например:.
create procedure DummyProc
as
begin
set nocount on
...
set nocount off
end
set nocount on
отключит сообщение SQL X rows affected.
. Это сообщение в некоторых случаях подавляется из-за нежелательных эффектов с клиентом, выполняющим хранимую процедуру.
set nocount off
отменяет это подавление. Однако set nocount on
является параметром области видимости и по умолчанию будет отключен при выходе из области.
Теперь, требуется set nocount off
? Нет, поскольку любые новые выполненные команды будут в другой области, и по умолчанию set nocount off
всегда действует. Но, как указано выше в комментариях, он рассмотрел хорошую практику, просто чтобы явно указать, что этот параметр вернется к нормальному состоянию, когда proc завершит выполнение.
только если вы не хотите видеть
(1 row(s) affected) // or n rows....
большую часть времени - при отладке
и вы используете команду печати, чтобы вы могли видеть чистый текст... так что это хорошая практика.
Это не влияет на результат запроса (вкл. или выкл. - это не имеет значения.) - если это то, что вы просите. (спасибо JNK).
Я знаю, что это довольно старый пост, но это был первый хит в 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, он может иметь другую настройку, чем вы предполагаете.