В очередной раз наступил на эти грабли и решил написать – начинайте написание любой процедуры, триггера, просто длинного запроса со строки:
SET NOCOUNT ON
Без этой строки вы реально можете получить проблемы, например, в отчетах, быстрых поисках (если пишете запрос руками и там более одной конструкции), в стандартной функциональности (в случае использования триггеров).
Вот, что написано про эту конструкцию в документации:
Если значение инструкции SET NOCOUNT равно ON, то количество строк не возвращается. Если значение инструкции SET NOCOUNT равно OFF, то количество строк возвращается.
Функция @@ROWCOUNT обновляется, даже если значение SET NOCOUNT равно ON.
Инструкция SET NOCOUNT ON запрещает всем инструкциям хранимой процедуры отправлять клиенту сообщения DONE_IN_PROC. Для хранимых процедур с несколькими инструкциями, не возвращающих большое количество фактических данных, установка в инструкции SET NOCOUNT значения ON может значительно повысить производительность за счет существенного снижения объема сетевого трафика.
Инструкция SET NOCOUNT устанавливается во время выполнения, а не на этапе синтаксического анализа.
В большенстве случаев, я использую инструкцию set nocount on и в триггерах и в хранимых процедурах, кроме присутствия операторов UPDATE и DELETE которые затрагивают всю таблицу.
ОтветитьУдалить