Set nocount on что это
Set nocount on что это
SET NOCOUNT
Stops the message indicating the number of rows affected by a Transact-SQL statement from being returned as part of the results.
Syntax
SET NOCOUNT
Remarks
When SET NOCOUNT is ON, the count (indicating the number of rows affected by a Transact-SQL statement) is not returned. When SET NOCOUNT is OFF, the count is returned.
The @@ROWCOUNT function is updated even when SET NOCOUNT is ON.
SET NOCOUNT ON eliminates the sending of DONE_IN_PROC messages to the client for each statement in a stored procedure. When using the utilities provided with Microsoft� SQL Server� to execute queries, the results prevent «nn rows affected» from being displayed at the end Transact-SQL statements such as SELECT, INSERT, UPDATE, and DELETE.
For stored procedures that contain several statements that do not return much actual data, this can provide a significant performance boost because network traffic is greatly reduced.
The setting of SET NOCOUNT is set at execute or run time and not at parse time.
| |
pkarklin Member ������: ������ (�����) | ��� ���� ��� ����. � BOL �� ���� ��������. |
20 ��� 03, 13:34����[426219] �������� | ���������� �������� ���������� |
| |
Dr.Night Member ������: | ��������: https://www.sql.ru/forum/actualthread.aspx?bid=4&tid=59091 � SQL Query Analyzer ��� ���� ������ �� �������, � � Access �� �������. :-\ |
20 ��� 03, 13:52����[426266] �������� | ���������� �������� ���������� |
| |
pkarklin Member ������: ������ (�����) | �� ������ ��� � ����������� ����� ���������� ��� ���������� ��� SET NOCOUNT ON ���������� ������� (Access) ����� ������� ��������� � ����� ������������ �������. �� �� ����� ���� ������ �� ���� ��������� � �������, � �� ������� �������, � Access �� ����, ������������ �� «nn rows affected» � ������ ����� ���������. � ��������� NOCOUNT ����� ��� ��������� ��� ������ ����������. |
20 ��� 03, 14:03����[426303] �������� | ���������� �������� ���������� |
| |
Dr.Night Member ������: | ������ �� � � ����� �������� � ���������. � �� �� ������, ��� ��� �������� �������� �� ����������� SET NOCOUNT. |
20 ��� 03, 14:17����[426351] �������� | ���������� �������� ���������� |
| |
pkarklin Member SET NOCOUNT ON ���������� � ����� �� (��������), ������� ����� 1 ����������. | |
20 ��� 03, 14:28����[426384] �������� | ���������� �������� ���������� |
| |
Glory Member ������: | � �� �� ������, ��� ��� �������� �������� �� ����������� SET NOCOUNT. �� ���, �����������. � ����� ���, ��� ��������� �� ADO, ����������� �������� �� �����. |
21 ��� 03, 11:57����[427970] �������� | ���������� �������� ���������� |
| |
ggguest Guest | To Guest: � ��� ��� 3640 �����������, ����. ��� ��� ������������ � ������ 3640? |
21 ��� 03, 12:33����[428083] �������� | ���������� �������� ���������� |
| |||
Syd Guest |
��� ��� ����� ������� � Delphi+ADO � ������ ��� �������� ��� set nocount on | ||
21 ��� 03, 12:43����[428115] �������� | ���������� �������� ���������� |
| |
tpg Member ������: Novosibirsk | ����� ������� � Delphi+ADO � ������ ��� �������� ��� set nocount on �������, �������, ������� �� �� ��? |
21 ��� 03, 13:01����[428182] �������� | ���������� �������� ���������� |
| |||
pkarklin Member ������: ������ (�����) |
�������� �� �������� ��� �� ���������. ������ ��� ����� �� SET NOCOUNT ON �� ����� ������ ���� ��� ���������� ��������������� ����������. ���� ���� �������, �� ��. � ��� ���� ����� �������� � ��, �� ��� ���� ��������� �� ��������. | ||
21 ��� 03, 13:04����[428194] �������� | ���������� �������� ���������� |
| |
syd Guest | ����� ������ ���, ���� ��: —— create procedure sp_mine as select * from myTable ——- ���� �� ����� ���������� TADOStoredProc, TDataSource, TDBGrid. TADOStoredProc.Procedeure = sp_mine; TDataSource.DataSet = TADOStoredProc; TDBGrid.DataSource = TDataSource ��� � ����� ������������ ���������, � ��� ��������? |
26 ��� 03, 14:38����[434097] �������� | ���������� �������� ���������� |
| |
pkarklin Member ��� ��� � �����, ��� ��� �� �� 1 ���������� SET NOCOUNT ON �� �����. | |
26 ��� 03, 14:48����[434136] �������� | ���������� �������� ���������� |
| |
Syd Guest | ���� � ���� � ����� ��, �� ���������� ����������: —— create procedure sp_mine as create #tmpTable( f1 int ) insert into #tmpTable values (1) select * from #tmpTable drop #tmpTable ——- ���� ��������� ��������.. |
26 ��� 03, 15:03����[434182] �������� | ���������� �������� ���������� |
| |
pkarklin Member ������: ������ (�����) | �� �� �������� ������ ��� ����� ��������. �� ��� ���� �� ������ ������������ ������������� �������� (� ��� �� �� ��),�� ����������� ��������� (��� ��������� ��������) �� ������. |
26 ��� 03, 15:33����[434286] �������� | ���������� �������� ���������� |
����� ����������� �������� ����� 1 ����. |
| |||
Lerik79 Member ������: |
� ���� �� ������� �� ����������� ���� ���������� + ���������� ��, ����� ������� ���� ����������, �� ����� �� � ������ ������ �� ������� �� ��������� SET NOCOUNT ON? | ||
21 ��� 06, 17:26����[3033732] �������� | ���������� �������� ���������� |
| ||||||||||||||||
Aleksey-K Member
Duration of SET Options SET options that are set by a user in a script apply until reset or the user’s session with the server is terminated. SET options that are set within a stored procedure or trigger apply until reset inside that stored procedure or trigger, or until control returns to the code that invoked the stored procedure or trigger. Unless explicitly reset, SET option values from all higher level code apply within a stored procedure or trigger. SET NOCOUNT (Transact-SQL)Запрещает вывод количества строк, на которые влияет инструкция Transact-SQL или хранимая процедура, в составе результирующего набора. СинтаксисСсылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям. RemarksЕсли значение инструкции SET NOCOUNT равно ON, то количество строк не возвращается. Если значение инструкции SET NOCOUNT равно OFF, то количество строк возвращается. Функция @@ROWCOUNT обновляется, даже если значение SET NOCOUNT равно ON. Инструкция SET NOCOUNT ON запрещает всем инструкциям хранимой процедуры отправлять клиенту сообщения DONE_IN_PROC. Для хранимых процедур с несколькими инструкциями, не возвращающих большое количество фактических данных, или для процедур, содержащих циклы Transact-SQL, установка в инструкции SET NOCOUNT параметра ON может значительно повысить производительность за счет существенного снижения объема сетевого трафика. Инструкция SET NOCOUNT устанавливается во время выполнения, а не на этапе синтаксического анализа. Чтобы просмотреть текущее значение для этого параметра, выполните следующий запрос. РазрешенияНеобходимо быть членом роли public. ПримерыВ следующем примере запрещается вывод сообщения о количестве измененных строк. SQL-Ex blogНовости сайта «Упражнения SQL», статьи и переводы SET NOCOUNT для SQL ServerНа прошлой неделе я пересматривал статью и обнаружил, что мне нужна инфомация об использовании NOCOUNT в качестве стандартного средства при написании хранимых процедур. Быстрый поиск в интернете нашел мою старую статью. Видимо, меня спросили, можно ли включить NOCOUNT для конкретной базы данных SQL Server. Как предполагалось в статье, это не было возможным. Опция NOCOUNT устанавливается для всего экземпляра, для конкретного подключения или в коде T-SQL. Поскольку эта статья была написана задолго до появления новейшего оператора ALTER DATABASE SCOPED CONFIGURATION, я понадеялся, что теперь стало возможным включить NOCOUNT для базы данных. Оказалось, что нет, т.к. перечисленные здесь допустимые опции не включают NOCOUNT. Печально. Но, конечно, я все же попытался. На самом деле не удалось. Я попытался включить NOCOUNT для моего экземпляра SQL 2019, и никак. Вообще. ПровалИспользуя код из моей предыдущей статьи, вы можете включить NOCOUNT для экземпляра, установив user option в 512: Теперь откройте новое окно запроса в SQL Server Management Studio (SSMS), установите вывод результатов в тексте, чтобы проще их просматривать, и выполните запрос. Тогда вы увидите это: Это не то поведение, которое ожидалось! Моей первой реакцией было, что я что-то не так сделал. Я решил попробовать в Azure Data Studio (ADS), подключившись и выполнив запрос: Тот же результат. Два инструмента, и результирующий набор показывает число обработанных строк, несмотря на явно установленную пользовательскую опцию. И графический интерфейс SSMS также подтверждает это: ПоворотКак бы то ни было, я потратил время, пытаясь выяснить, что происходит. Я могу вручную включить и выключить NOCOUNT внутри T-SQL и увидеть число обработанных строк (или нет). Я проверял и перепроверял все, что приходило мне в голову, и чувствовал себя потерявшим рассудок. Я начал спрашивать себя, как мне удалось стать сертифицированным специалистом в SQL Server. Я имею в виду, что это простое изменение конфигурации. Это не ракетная техника. Поэтому я делаю то, что сделал бы любой другой в этой ситуации. Я выключил свой ноут и выбросил это из головы на несколько дней. В конце концов я решил снова открыть ноут попытаться опять. Я могу все воспроизвести. Поэтому я обратился к нескольким друзьям, наблюдали ли они также подобные проблемы. Один из них, Karen López (@datachick), задал мне несколько наводящих вопросов. Эти вопросы заставили меня подумать о других способах проверки. Я внезапно понял, что могу проверить опции, установленные в моем текущем подключении: Выполнение вышеприведенного кода вернуло следующий результат для моего подключения: И тут меня осенило. Мое подключение не имело включенного NOCOUNT! Я не хочу сказать, что был сильно удивлен, но это помогло увидеть, что отсутствует. Я решил открыть подключение с помощью SQLCMD и посмотреть на поведение по умолчанию для этого подключения. Разумеется, NOCOUNT включен, как и ожидалось: Моя строка подключения не имела дополнительных опций, и поведение NOCOUNT соблюдается. Это ожидаемое поведение для экземпляра. Пункт конфигурации NOCOUNT в опциях пользователя не распознается при подключении с помощью этих инструментов. Другие опции по-видимому соответствуют, но по неведомым причинам NOCOUNT игнорируется. Это объясняет, почему я наблюдал неожиданное поведение. Пока оставлю свой сертификат. ВыводыЯ не знаю, баг это или фича. Но это несомненно раздражающее поведение для конечного пользователя, подобного мне. Но если я устанавливаю SET NOCOUNT для SQL server, я ожидаю, что она применяется для всех пользователей, подключающихся с этого момента. Поскольку поведение других опция кажется соответствующим, должно быть что-то не так с NOCOUNT. Не важно, как подключаются пользователи. SSMS и ADS должны соответствовать настройкам сервера. Я подозреваю, что другие инструменты, вероятно, используют тот же код, что и SSMS и ADS, а это означает, что вам следует дважды проверить фактическую строку подключения, используемую в вашем приложении. Это могло бы объяснить неожиданное поведение. Обратные ссылкиНет обратных ссылок КомментарииПоказывать комментарии Как список | Древовидной структурой Инструкции SET (Transact-SQL)Язык Transact-SQL предоставляет несколько инструкций SET, которые изменяют текущий сеанс, управляя специфическими данными. Инструкции SET группируются в категории, показанные в следующей таблице. Сведения об установке локальных переменных с помощью инструкции SET см. в разделе SET @local_variable (Transact-SQL).
|