SET NOCOUNT ON возвращает сообщения в SQL Server Management Studio - PullRequest
1 голос
/ 04 мая 2011

У меня есть следующая хранимая процедура:

ALTER PROCEDURE [dbo].[spTitle_GetTitleById]
(
   @TitleId INT
)

AS

BEGIN

   SET NOCOUNT ON;

   SELECT
      Id,
      Name,
      Active
   FROM
      Title
   WHERE
      Id = @TitleId

END

Мне сказали использовать SET NOCOUNT ON;, если я не хочу, чтобы сообщения возвращались. Я запустил эту хранимую процедуру в SQL Server Management Studio 2008 и получил следующее сообщение:

(1 row(s) affected)

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

Я щелкнул правой кнопкой мыши по хранимой процедуре и выбрал «Выполнить хранимую процедуру» ... Затем я установил для нее значение «ВЫКЛ» и получил:

(1 row(s) affected)
(1 row(s) affected)

Так что, установив его в положение ВКЛ или ВЫКЛ, он по-прежнему возвращал сообщения на вкладке «Сообщения» на панели результатов.

Еще один вопрос: когда (в каких сценариях) будет разумно использовать SET NOCOUNT OFF;?

Ответы [ 3 ]

3 голосов
/ 04 мая 2011

SET NOCOUNT ON сбрасывается при выходе из процедуры и идет вверх по стеку вызовов.Когда вы выполняете процедуру из SSMS, она генерирует скрипт, подобный следующему:

DECLARE @return_value int

EXEC    @return_value = [dbo].[spTitle_GetTitleById]
        @TitleId = 1

SELECT  'Return Value' = @return_value  /*Message comes from here*/

Если вы хотите избежать этого по какой-то причине, вам потребуется SET NOCOUNT ON во внешнем пакете.См. SET NOCOUNT ON use , чтобы обсудить преимущества использования этого ON или OFF

.
2 голосов
/ 04 мая 2011

Еще один вопрос, когда будет разумно (в каких сценариях) использовать SET NOCOUNT OFF?

См. Каковы преимущества и недостатки отключения NOCOUNT вЗапросы SQL Server? Для преимуществ, включающих SET NOCOUNT ON

Что касается того, почему вы хотели бы отключить это (чтобы возвращались счетчики строк) - это нужно отключать всякий раз, когда вы хотите иметь возможность сказатьсколько строк было затронуто в ситуациях, когда нет набора результатов, или вы хотите иметь возможность получить количество строк без предварительного чтения всего набора результатов.

Например, в .Net класс DataAdapter использует rowcounts ипоэтому настройка NOCOUNT ON вызывает проблемы при редактировании или удалении данных ( источник ).

1 голос
/ 04 мая 2011

Это не правильно, запишите скрипт и убедитесь, что он не выключен, а не включен, если он включен, он не должен возвращать (затронуты 1 строка) сообщения

Также как вывыполнение proc

- это просто

exec spTitle_GetTitleById 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...