powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / A trigger returned a resultset and/or was running with SET NOCOUNT OFF
25 сообщений из 33, страница 1 из 2
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
    #40118637
Фотография Nick74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет,

помогите, не знаю куда копать.
Есть некая процедура, которая добавляет записи в таблицы. В этих таблицах есть триггеры, которые тоже могут что-то добавлять и что-то проверять.
В одном из триггеров срабатывает RAISERROR по определенному условию.
В момент срабатывания RAISERROR MS SQL генерирует Exception
Код: sql
1.
A trigger returned a resultset and/or was running with SET NOCOUNT OFF while another outstanding result set was active 


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

Во всех триггерах стоят SET NOCOUNT ON вначале. Никаких бесхозных SELECT, возвращающих результат тоже не нашел.
При этом та же самая процедура, выполненная из под SSMS (Оригинал работает под PHP) возвращает только правильное сообщение об ошибке.
Никаких варнингов не выдается, знаю, что они тоже рассматриваются как result set.
Опции пытался сделать одинаковыми, не помогло.
Запускал оба процесса под профайлером, из под PHP вижу несколько Exceptions вида "этой временной таблицы еще нет" (Видимо при компиляции плана) и сообщений Missing column statistics, но как outstanding result set, я так понимаю, это не должно рассматриваться.

Подскажите как поймать этот вывод ну или хотя бы понять что это и как с ним бороться?
И почему под SSMS этой ошибки не возникает?

Включал "disallow results from triggers option", никаких сообщений не выдается, то есть по идее нигде нет возврата результатов.

Проверял на MS SQL 2017 и 2019 - разницы нет.
...
Рейтинг: 0 / 0
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
    #40118670
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nick74,

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

Вообще, такие вещи лучше у пехаперов спрашивать, ибо тут, если из SSMS все работает, значит виноваты либо настройки соединения, либо библиотека доступа.

Вы пробовали ставить SQL Profiler / XEvents на коннект из пхп и смотреть, что именно там отправляется и возвращается и рейзится? Это тоже может натолкнуть на мысли.
...
Рейтинг: 0 / 0
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
    #40118688
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nick74,

на закладке "сообщения" SSMS точно ничего не написано кроме
Выполнение команд успешно завершено.

Время выполнения:?
...
Рейтинг: 0 / 0
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
    #40118858
Фотография Nick74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ennor Tiegael ,

Microsoft drivers for PHP, 5.6.1, в исходном виде файл обзывался php_sqlsrv_73_ts.dll. На php это функции, начинающиеся с sqlsrv_.
Как-то не подумал, что может быть виновата библиотека, сообщение же выдается триггером.
Настройки - да, но блин знать бы что можно включить чтобы такое получать...

Трейс лог есть, могу включить, но он здоровый, больше 2000 строк, и не факт, что нужные события выбраны, надо же знать на что смотреть.
Непосредственно сам момент вложил.

А есть способ посмотреть все флаги одновременно как-то?

Владислав Колосов ,
Время? Ну может пару секунд при включенном профайлере, без него быстрее.
...
Рейтинг: 0 / 0
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
    #40118864
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nick74, у меня немного не так и прога на дельфи.
В момент ошибки в триггере она падала по непонятной ошибке
Заменил в триггере raiserror на throw и в проге стало отображаться нормальное сообщение об ошибке
попробуйте
...
Рейтинг: 0 / 0
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
    #40118865
Фотография Nick74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HandKot,

На Delphi у меня тоже есть кусочек интерфейса, под ним пробовал, там все нормально выдается.
RAISERROR используется исторически, так как база данных еще с MS SQL 2000 вроде бы живет, а тогда THROW не было.
...
Рейтинг: 0 / 0
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
    #40118990
Фотография Nick74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверил опции по sp_configure - все совпадает.
Для всяких там ANSI_WARNINGS и пр. пробовал ставить в SSMS начальные настройки, которые выполняются при запуске PHP сессии, тоже не помогло. Как посмотреть их сразу все не знаю.
...
Рейтинг: 0 / 0
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
    #40119006
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nick74,

неправильно поняли, что-то еще написано, кроме
"Выполнение команд успешно завершено.

Время выполнения ..."
...
Рейтинг: 0 / 0
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
    #40119009
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nick74
Проверил опции по sp_configure - все совпадает.
Для всяких там ANSI_WARNINGS и пр. пробовал ставить в SSMS начальные настройки, которые выполняются при запуске PHP сессии, тоже не помогло. Как посмотреть их сразу все не знаю.


https://docs.microsoft.com/ru-ru/sql/t-sql/functions/options-transact-sql?view=sql-server-ver15

Скрипт от felix_ff

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SELECT
      CAST(@@OPTIONS AS VARCHAR(20)) AS "@@OPTIONS",
      CAST(SIGN(@@OPTIONS & 1) AS CHAR) AS "DISABLE_DEF_CNST_CHK",
      CAST(SIGN(@@OPTIONS & 2) AS CHAR) AS "IMPLICIT_TRANSACTIONS" ,
      CAST(SIGN(@@OPTIONS & 4) AS CHAR) AS "CURSOR_CLOSE_ON_COMMIT" ,
      CAST(SIGN(@@OPTIONS & 8) AS CHAR) AS "ANSI_WARNINGS" ,
      CAST(SIGN(@@OPTIONS & 16) AS CHAR) AS "ANSI_PADDING" ,
      CAST(SIGN(@@OPTIONS & 32) AS CHAR) AS "ANSI_NULLS" ,
      CAST(SIGN(@@OPTIONS & 64) AS CHAR) AS "ARITHABORT" ,
      CAST(SIGN(@@OPTIONS & 128) AS CHAR) AS "ARITHIGNORE" ,
      CAST(SIGN(@@OPTIONS & 256) AS CHAR) AS "QUOTED_IDENTIFIER" ,
      CAST(SIGN(@@OPTIONS & 512) AS CHAR) AS "NOCOUNT" ,
      CAST(SIGN(@@OPTIONS & 1024) AS CHAR) AS "ANSI_NULL_DFLT_ON" ,
      CAST(SIGN(@@OPTIONS & 2048) AS CHAR) AS "ANSI_NULL_DFLT_OFF" ,
      CAST(SIGN(@@OPTIONS & 4096) AS CHAR) AS "CONCAT_NULL_YIELDS_NULL" ,
      CAST(SIGN(@@OPTIONS & 8192) AS CHAR) AS "NUMERIC_ROUNDABORT" ,
      CAST(SIGN(@@OPTIONS & 16384) AS CHAR) AS "XACT_ABORT",
      CONVERT(VARCHAR(255), CONNECTIONPROPERTY('net_transport')) AS "net_transport",
      CONVERT(VARCHAR(255), CONNECTIONPROPERTY('protocol_type')) AS "protocol_type",
      CONVERT(VARCHAR(255), CONNECTIONPROPERTY('auth_scheme')) AS "auth_scheme",
      CONVERT(VARCHAR(255), CONNECTIONPROPERTY('physical_net_transport')) AS "physical_net_transport"
...
Рейтинг: 0 / 0
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
    #40119015
Фотография Nick74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,

Код: sql
1.
2.
3.
4.
сообщение: 50000, уровень: 16, состояние: 1, процедура: dbo.FSM_VacationGraph_UpdateRows, строка: 62 [строка начала пакета: 22]
---Окончание отпуска должно быть до даты истечения срока контракта

Время выполнения: 2021-12-10T15:49:31.1266501+03:00


Это все.
...
Рейтинг: 0 / 0
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
    #40119019
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nick74,

Ну так, у Вас возвращается ошибка бизнес правил, сгенерированная "программистом".
...
Рейтинг: 0 / 0
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
    #40119020
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nick74
Владислав Колосов,

Код: sql
1.
2.
3.
4.
сообщение: 50000, уровень: 16, состояние: 1, процедура: dbo.FSM_VacationGraph_UpdateRows, строка: 62 [строка начала пакета: 22]
---Окончание отпуска должно быть до даты истечения срока контракта

Время выполнения: 2021-12-10T15:49:31.1266501+03:00



Это все.

В SSMS по умолчанию результат работы выводиться в двух вкладках: Messages (как раз там ошибки) и Results.

Есть ли что на вкладке Results?
...
Рейтинг: 0 / 0
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
    #40119033
Фотография Nick74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWist,

В ССМС да. В PHP возвращается A trigger returned a resultset and/or was running...
...
Рейтинг: 0 / 0
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
    #40119034
Фотография Nick74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLex,

Нет, там пусто...
...
Рейтинг: 0 / 0
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
    #40119039
Фотография Nick74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опции сравнил. Совпадают.

Далее выяснилось, что ошибка возникает в PHP только посередине странички, после выполнения двух десятков других запросов.
Если исполнить из под PHP один конкретный вызов процедуры, то он возвращает корректную ошибку.

Сижу в непонятках. Транзакций у меня явных нет. Как могут предыдущие запросы влиять на вызов процедуры, точнее подставлять ей какие-то неучтенные результаты?
Сейчас попробую повторить всю цепочку вызовов PHP...
...
Рейтинг: 0 / 0
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
    #40119066
Фотография Nick74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получил наконец минимальный кусок, который воспроизводит ошибку.
Код: php
1.
2.
3.
   $q =  $this->sql->OpenSQL( "select * from dbo.FSM_VacationGraph_GetCombinedData('1022') order by mmonth, mday " );
   $this->sql->FetchRow( $q, SQLSRV_FETCH_ASSOC );
   $this->sql->ExecSQL( "exec dbo.FSM_VacationGraph_UpdateRows '1022', '2.9.2.28' " );



То есть перед процедурой, которая вызывает ошибку, открывается запрос и делается выборка первой записи из него.
...
Рейтинг: 0 / 0
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
    #40119076
Фотография Nick74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Под SSMS повторить пока не смог.
Любопытно, что если уменьшить количество выбираемых первым запросом полей, то ошибка становится неустойчивой. То есть то она есть, то ее нет. Такое ощущение, что какая-то часть первого запроса продолжает выполняться асинхронно и мешает второму запросу...
...
Рейтинг: 0 / 0
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
    #40119083
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nick74,

вы убедились, что триггеры не выполняют процедуры, которые могут вернуть набор данных?
...
Рейтинг: 0 / 0
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
    #40119085
Фотография Nick74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,

Да. Вообще странно, я пытался под ССМС вызвать аналогичную ошибку, специально возвращая результат из процедуры или триггера. Неудачно. Такое ощущение, что ССМС плевать на эту проблему.
...
Рейтинг: 0 / 0
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
    #40119225
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nick74
Вообще странно, я пытался под ССМС вызвать аналогичную ошибку, специально возвращая результат из процедуры или триггера. Неудачно. Такое ощущение, что ССМС плевать на эту проблему.
Что тут странного? Это штатная функциональность сервера, и неудивительно, что SSMS успешно с сервером работает, это же утилита от производителя сиквела.
Ненормально, что какие то библиотеки доступа не могут работать с возвращаемыми сервером данными.
...
Рейтинг: 0 / 0
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
    #40119604
Фотография Nick74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

Странно то, что ошибка эта генерируется сервером, а не сторонней библиотекой, в противном случае я бы вряд ли увидел ее в профайлере. То есть, я так понимаю, у сервера есть некая скрытая (Ну может и не скрытая, но я ее не нашел) настройка, которая активируется библиотекой, и говорит серверу что-то типа "Во время эксепшена проверяй наличие возвращенных данных и генерируй вот такую ошибку мне"...
Соответственно, теоретически, наверно можно и в ССМС включить такое поведение.
...
Рейтинг: 0 / 0
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
    #40119640
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nick74,

Выполните
Код: sql
1.
2.
sp_configure 'disallow results from triggers', '0'
reconfigure



но это лишь спрячет проблему.
...
Рейтинг: 0 / 0
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
    #40120301
Фотография Nick74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,

увы, проверял, не помогает.
То есть если действительно возвращать результат из триггера, экспешен, конечно, появляется.
Но в моем случае нет, то есть в реальности никаких возвратов из триггера нет.
...
Рейтинг: 0 / 0
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
    #40120331
Фотография Nick74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,

понял, что непонятно написал.
У меня изначально эта опция была отключена.
Я пробовал ее включать в надежде, что где-то раньше, где есть какой-то вывод в триггере, появится новый ексепшен. Увы, не помогло, ничего нового не появилось.
Эксепшен у этой опции несколько другой, поэтому спутать их сложно.
...
Рейтинг: 0 / 0
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
    #40120368
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nick74
Владислав Колосов,

Код: sql
1.
2.
3.
4.
сообщение: 50000, уровень: 16, состояние: 1, процедура: dbo.FSM_VacationGraph_UpdateRows, строка: 62 [строка начала пакета: 22]
---Окончание отпуска должно быть до даты истечения срока контракта

Время выполнения: 2021-12-10T15:49:31.1266501+03:00


Э то все .


Другими словами: Это п-ц

Может текст триггера посмотрим, ткскыть, развеемся?
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / A trigger returned a resultset and/or was running with SET NOCOUNT OFF
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]