Что может случиться хуже, если я не использую SET NOCOUNT ON в хранимой процедуре в T-SQL? - PullRequest
0 голосов
/ 28 августа 2018

MSDN состояний

SET NOCOUNT ON предотвращает отправку сообщений DONE_IN_PROC на клиент для каждого оператора в хранимой процедуре. Для хранимых процедур которые содержат несколько операторов, которые не возвращают много фактических данных, или для процедур, содержащих циклы Transact-SQL, установка SET NOCOUNT ON может обеспечить значительное повышение производительности, потому что сеть трафик значительно уменьшен.

Является ли уменьшенный сетевой трафик единственной причиной использования NOCOUNT ON, или он делает что-то еще?

Ответы [ 3 ]

0 голосов
/ 28 августа 2018

В более старых API (ADO, до ADO.Net) было бы запутано то, что возвращалось из proc. Казалось бы, X row(s) affected был набор результатов, который вы искали. Это вернуло бы это вместо того, что вы выбирали.

Кажется, это больше не проблема.

0 голосов
/ 28 августа 2018

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

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

Итак, в ответ вы могли бы найти, что вам нужно включить NOCOUNT, или вам может нужно включить NOCOUNT ON для большей части процедуры, но выключите его непосредственно перед тем, как последний запрос, или вы могли бы просто оставить его в покое.

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

0 голосов
/ 28 августа 2018

Вы не получите количество затронутых строк из проц.

Я думаю, этот вопрос и ответ , и ссылки, содержащиеся в, , особенно Ремус о производительности , помогут.

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

...