|
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
|
|||
---|---|---|---|
#18+
Всем привет, помогите, не знаю куда копать. Есть некая процедура, которая добавляет записи в таблицы. В этих таблицах есть триггеры, которые тоже могут что-то добавлять и что-то проверять. В одном из триггеров срабатывает RAISERROR по определенному условию. В момент срабатывания RAISERROR MS SQL генерирует Exception Код: sql 1.
и соответствующий вывод, который заменяет собой реальную причину. (Ну не заменяет, а идет первым в выводе, и именно его и хватает библиотека). В результате в программе выводится именно это вместо правильного сообщения об ошибке. Во всех триггерах стоят 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 - разницы нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2021, 15:38 |
|
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
|
|||
---|---|---|---|
#18+
Nick74, Вы скромно умолчали о самом главном - типе и версии драйвера, который использует пхп. Там может быть NTWDBLIB, и это кранты сразу (ну или почти сразу). Вообще, такие вещи лучше у пехаперов спрашивать, ибо тут, если из SSMS все работает, значит виноваты либо настройки соединения, либо библиотека доступа. Вы пробовали ставить SQL Profiler / XEvents на коннект из пхп и смотреть, что именно там отправляется и возвращается и рейзится? Это тоже может натолкнуть на мысли. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2021, 17:02 |
|
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
|
|||
---|---|---|---|
#18+
Nick74, на закладке "сообщения" SSMS точно ничего не написано кроме Выполнение команд успешно завершено. Время выполнения:? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2021, 17:32 |
|
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
|
|||
---|---|---|---|
#18+
Ennor Tiegael , Microsoft drivers for PHP, 5.6.1, в исходном виде файл обзывался php_sqlsrv_73_ts.dll. На php это функции, начинающиеся с sqlsrv_. Как-то не подумал, что может быть виновата библиотека, сообщение же выдается триггером. Настройки - да, но блин знать бы что можно включить чтобы такое получать... Трейс лог есть, могу включить, но он здоровый, больше 2000 строк, и не факт, что нужные события выбраны, надо же знать на что смотреть. Непосредственно сам момент вложил. А есть способ посмотреть все флаги одновременно как-то? Владислав Колосов , Время? Ну может пару секунд при включенном профайлере, без него быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 09:42 |
|
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
|
|||
---|---|---|---|
#18+
Nick74, у меня немного не так и прога на дельфи. В момент ошибки в триггере она падала по непонятной ошибке Заменил в триггере raiserror на throw и в проге стало отображаться нормальное сообщение об ошибке попробуйте ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 09:57 |
|
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
|
|||
---|---|---|---|
#18+
HandKot, На Delphi у меня тоже есть кусочек интерфейса, под ним пробовал, там все нормально выдается. RAISERROR используется исторически, так как база данных еще с MS SQL 2000 вроде бы живет, а тогда THROW не было. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 10:14 |
|
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
|
|||
---|---|---|---|
#18+
Проверил опции по sp_configure - все совпадает. Для всяких там ANSI_WARNINGS и пр. пробовал ставить в SSMS начальные настройки, которые выполняются при запуске PHP сессии, тоже не помогло. Как посмотреть их сразу все не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 15:04 |
|
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
|
|||
---|---|---|---|
#18+
Nick74, неправильно поняли, что-то еще написано, кроме "Выполнение команд успешно завершено. Время выполнения ..." ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 15:39 |
|
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
|
|||
---|---|---|---|
#18+
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.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 15:41 |
|
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
|
|||
---|---|---|---|
#18+
Владислав Колосов, Код: sql 1. 2. 3. 4.
Это все. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 15:50 |
|
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
|
|||
---|---|---|---|
#18+
Nick74, Ну так, у Вас возвращается ошибка бизнес правил, сгенерированная "программистом". ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 15:54 |
|
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
|
|||
---|---|---|---|
#18+
Nick74 Владислав Колосов, Код: sql 1. 2. 3. 4.
Это все. В SSMS по умолчанию результат работы выводиться в двух вкладках: Messages (как раз там ошибки) и Results. Есть ли что на вкладке Results? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 15:55 |
|
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
|
|||
---|---|---|---|
#18+
PaulWist, В ССМС да. В PHP возвращается A trigger returned a resultset and/or was running... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 16:19 |
|
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
|
|||
---|---|---|---|
#18+
msLex, Нет, там пусто... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 16:20 |
|
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
|
|||
---|---|---|---|
#18+
Опции сравнил. Совпадают. Далее выяснилось, что ошибка возникает в PHP только посередине странички, после выполнения двух десятков других запросов. Если исполнить из под PHP один конкретный вызов процедуры, то он возвращает корректную ошибку. Сижу в непонятках. Транзакций у меня явных нет. Как могут предыдущие запросы влиять на вызов процедуры, точнее подставлять ей какие-то неучтенные результаты? Сейчас попробую повторить всю цепочку вызовов PHP... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 16:29 |
|
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
|
|||
---|---|---|---|
#18+
Получил наконец минимальный кусок, который воспроизводит ошибку. Код: php 1. 2. 3.
То есть перед процедурой, которая вызывает ошибку, открывается запрос и делается выборка первой записи из него. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 17:33 |
|
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
|
|||
---|---|---|---|
#18+
Под SSMS повторить пока не смог. Любопытно, что если уменьшить количество выбираемых первым запросом полей, то ошибка становится неустойчивой. То есть то она есть, то ее нет. Такое ощущение, что какая-то часть первого запроса продолжает выполняться асинхронно и мешает второму запросу... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 17:55 |
|
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
|
|||
---|---|---|---|
#18+
Nick74, вы убедились, что триггеры не выполняют процедуры, которые могут вернуть набор данных? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 18:53 |
|
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
|
|||
---|---|---|---|
#18+
Владислав Колосов, Да. Вообще странно, я пытался под ССМС вызвать аналогичную ошибку, специально возвращая результат из процедуры или триггера. Неудачно. Такое ощущение, что ССМС плевать на эту проблему. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2021, 18:58 |
|
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
|
|||
---|---|---|---|
#18+
Nick74 Вообще странно, я пытался под ССМС вызвать аналогичную ошибку, специально возвращая результат из процедуры или триггера. Неудачно. Такое ощущение, что ССМС плевать на эту проблему. Ненормально, что какие то библиотеки доступа не могут работать с возвращаемыми сервером данными. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2021, 14:33 |
|
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
|
|||
---|---|---|---|
#18+
alexeyvg, Странно то, что ошибка эта генерируется сервером, а не сторонней библиотекой, в противном случае я бы вряд ли увидел ее в профайлере. То есть, я так понимаю, у сервера есть некая скрытая (Ну может и не скрытая, но я ее не нашел) настройка, которая активируется библиотекой, и говорит серверу что-то типа "Во время эксепшена проверяй наличие возвращенных данных и генерируй вот такую ошибку мне"... Соответственно, теоретически, наверно можно и в ССМС включить такое поведение. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2021, 12:17 |
|
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
|
|||
---|---|---|---|
#18+
Nick74, Выполните Код: sql 1. 2.
но это лишь спрячет проблему. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2021, 14:06 |
|
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
|
|||
---|---|---|---|
#18+
Владислав Колосов, увы, проверял, не помогает. То есть если действительно возвращать результат из триггера, экспешен, конечно, появляется. Но в моем случае нет, то есть в реальности никаких возвратов из триггера нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2021, 16:25 |
|
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
|
|||
---|---|---|---|
#18+
Владислав Колосов, понял, что непонятно написал. У меня изначально эта опция была отключена. Я пробовал ее включать в надежде, что где-то раньше, где есть какой-то вывод в триггере, появится новый ексепшен. Увы, не помогло, ничего нового не появилось. Эксепшен у этой опции несколько другой, поэтому спутать их сложно. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2021, 17:49 |
|
A trigger returned a resultset and/or was running with SET NOCOUNT OFF
|
|||
---|---|---|---|
#18+
Nick74 Владислав Колосов, Код: sql 1. 2. 3. 4.
Э то все . Другими словами: Это п-ц Может текст триггера посмотрим, ткскыть, развеемся? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2021, 18:54 |
|
|
start [/forum/topic.php?fid=46&msg=40118688&tid=1684003]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
164ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 288ms |
0 / 0 |