SET NOCOUNT (Transact-SQL)
Определяет, возвращается ли сообщение, отображающее количество строк, затронутых инструкцией Transact-SQL или хранимой процедурой после результирующий набор. Это сообщение является дополнительным результирующий набор.
Синтаксис
SET NOCOUNT
Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.
Замечания
Если параметр SET NOCOUNT имеет значение ON, счетчик не возвращается. Если значение инструкции SET NOCOUNT равно OFF, то количество строк возвращается.
Функция @@ROWCOUNT обновляется, даже если параметр SET NOCOUNT имеет значение ON.
Инструкция SET NOCOUNT ON запрещает всем инструкциям хранимой процедуры отправлять клиенту сообщения DONEINPROC. Для хранимых процедур, содержащих несколько инструкций, которые не возвращают много фактических данных или для процедур, содержащих циклы Transact-SQL, параметр SET NOCOUNT to ON может обеспечить значительный рост производительности, так как сетевой трафик значительно снижается.
Инструкция SET NOCOUNT устанавливается во время выполнения, а не на этапе синтаксического анализа.
Чтобы просмотреть текущее значение для этого параметра, выполните следующий запрос.
DECLARE @NOCOUNT VARCHAR(3) = 'OFF'; IF ( (512 & @@OPTIONS) = 512 ) SET @NOCOUNT = 'ON'; SELECT @NOCOUNT AS NOCOUNT;
Разрешения
Необходимо быть членом роли public.
Примеры
В следующем примере запрещается вывод сообщения о количестве измененных строк. В следующем примере сообщение «(5 rows affected)» будет возвращаться клиентам только из первой инструкции SELECT.
USE AdventureWorks2022; GO SET NOCOUNT OFF; GO -- Display the count message. SELECT TOP(5) LastName FROM Person.Person WHERE LastName LIKE 'A%'; GO -- SET NOCOUNT to ON to no longer display the count message. SET NOCOUNT ON; GO SELECT TOP(5) LastName FROM Person.Person WHERE LastName LIKE 'A%'; GO -- Reset SET NOCOUNT to OFF SET NOCOUNT OFF; GO
См. также
- @@ROWCOUNT (Transact-SQL)
- Инструкции SET (Transact-SQL)
Обратная связь
Были ли сведения на этой странице полезными?
SET NOCOUNT ON ИСпользование
Запрещает вывод количества строк, на которые влияет инструкция Transact-SQL или хранимая процедура, в составе результирующего набора.
Такая информация очень даже может пригодиться при отладке, но потом, скорее всего, будет не нужна. Прописав SET NOCOUNT ON вы отключите вывод количества строк, тем самым увеличите производительность за счет сокращения объема трафика, особенно если у вас в процедуре есть циклы или процедура содержит несколько выражений сразу, но не возвращает большого количества строк.
Для подсчета строк, если вам это необходимо, лучше использовать @@rowcount. Одна из причин: если вы используете где-то в проекте DataAdapter или Command, то NOCOUNT может все поломать.

Стоит заметить, что если у вас на сервере NOCOUNT по умолчанию имеет одно значение, а в процедуре вы пишите другое, то локальное значение приоритетнее. Значение по умолчанию можно установить в Management Studio (Сервис-Параметры-Выполнение запроса-SQL Server-Дополнительно):
Ну и на англоязычном StackOverflow есть много интересных вопросов и ответов, касающихся NOCOUNT и его поведения, советую ознакомиться.
Set nocount on что это
Подскажите как для произвольной сессии получить свойство noCount
Есть сервер приложений, который использует пул соединений к БД. В какой-то момент (вызове хранимки или еще что-то) в соединении предположительно выставляется значение set no count on. И это плохо влияет на работоспособность сессии (с этого момент она «испорчена» — из пула она может быть предоставлена другой программной сессии сервера приложений и там поведет себя криво)
Как мне в management studio при выполнении запроса к sys.dm_exec_requests (смотрю активные сессии, их блокировки и запросы) понять какое было сделано последнее значение set noCount по каждой сессии ?
Гуглил и не нашел. Это вообще возможно ?
Вот например, есть свойство sys.dm_exec_requests.arithabort
Есть что-то аналогичное, типа sys.dm_exec_requests.noCountOn ?
Set nocount on что это
1. Какой прирост в процентах дает SET NOCOUNT ON?
2. Когда противопоказано SET NOCOUNT ON
3. Если все данные крутятся на сервере + темповые таблицы, то есть ли смысл в SET NOCOUNT ON
(0) Как вы понимаете значение этих инструкций? Потому как складывается впечатление, что никак.
http://technet.microsoft.com/ru-ru/library/ms189837.aspx
(1) справку осилил до создания темы однако )
если я нигде не использую @@ROWCOUNT, то можно смело использовать SET NOCOUNT ON ?
может 1с++ где-нить скрыто этот признак использует
для несколько запросов то для odbc SET NOCOUNT ON обязателен
чтобы вернуть последний результат
(3) Нет, о том что в результате работы запроса может получиться несколько рекордсетов, слышали?
(3) SET NOCOUNT ON/OFF никак не влияет на @@ROWCOUNT
(5) типа пакетного запроса?
и что с ними?
(7) Сильно не понял. Количество строк имеет привычку возвращаться как результат запроса. SET NOCOUNT это запрещает (ну или разрешает). Со всеми отсюда вытекающими.
(0) Откл Вкл сообщений при выполнении запросов . Как то так. Выключать при использовании триггеров в 1С 77 . Иначе не взлетит.
както все расплывчато
толи никто не в теме
толи вопросы в 0 тупые и отвечать никто не хочет
(10) 1.Открой QA/MS
2. Выполни
SET NOCOUNT ON
Select * from ТвояТаблица
Что пишет в окне сообщений ?
SET NOCOUNT OFF
Select * from ТвояТаблица
Что пишет в окне сообщений ?
(10) Всё как раз конкретно. Посмотри описание ВыполнитьИнструкцию(). И подумай, а что произойдёт, если ей подсунуть что-то сложносочинённое.
(11) ну то что не выводит сообщения я знаю, тока это к 0 никакого отношения
(12) у меня куча выполнитьскалярный а вот выпонитьинструкцию уже простой
Короче в хранимках и триггурах используй всегда SET NOCOUNT ON
В батчах с DML запросами используй всегда SET NOCOUNT ON
Кроме единственного случая когда количество строк после DML запроса надо получить методом ВыполнитьИнструкцию()
(что бы ВыполнитьИнструкцию() вернул количество обработанных строк нужен set nocount off)
(13) О! Посмотри описание ВыполнитьСкалярный! Не знаю, как сейчас, а раньше в описании было «Запрос может возвращать количество обработанных строк: в этом случае возвращается это значение».