18.12.2013, 12:17 | #21 |
Участник
|
В нашем случае обновление АОСов до RU8 не помогло, не смотря на то что в списке hotfix'ов было:
Data cache is not always synching between clustered AOSes - update conflicts on SysLastValue EntireTableCache record . В нашем случае выяснилось, что есть несколько хранимых процедур, у которых включается параметр NOCOUNT в ON без выключения в конце процедуры. (то о чем писал Vadik выше.) Сначала мы не придали этому совету внимания, но когда идеи кончились решили попробовать и это. Кривые хранимки нашли запросом: X++: select OBJECT_NAME(Object_Id),* from sys.dm_exec_procedure_stats where Object_Id in ( select Object_Id from sys.sql_modules (nolock) where definition like '%set nocount on%' and definition not like '%set nocount off%' ) order by last_execution_time desc P.S. Также была найдена след. информация на иностранном форуме: https://community.dynamics.com/ax/f/33/t/69323.aspx |
|
|
За это сообщение автора поблагодарили: Logger (10), gl00mie (10). |
21.01.2021, 15:14 | #22 |
Участник
|
Цитата:
Сообщение от Vadik
С триггерами \ хранимыми процедурами с SET NOCOUNT ON баловались ? Если забыли где-то его вернуть в нормальное (для AX - OFF) состояние, в этой сессии при попытке UPDATE .. WHERE RECID = %X and RECVERSION = %Y ядро не увидит искомого '1 record affected' и решит что это конфликт OCC
Вот тут https://www.sql.ru/forum/1332703/kak...zvolnoy-sessii утверждают, что при выходе из хранимки свойство должно восстанавливаться. Т.е. не должна хранимка смочь что либо испортить в сессии. P.S. Надо будет контрольный пример сбацать и проверить. |
|
21.01.2021, 22:03 | #23 |
Модератор
|
да, уверен
Цитата:
Вот тут
https://www.sql.ru/forum/1332703/kak...zvolnoy-sessii утверждают, что при выходе из хранимки свойство должно восстанавливаться. Т.е. не должна хранимка смочь что либо испортить в сессии. P.S. Надо будет контрольный пример сбацать и проверить X++: use tempdb go set nocount off go select count(*) from sys.objects go create procedure myProc as begin set nocount on; -- do something end go execute myProc go drop procedure myProc; go select count(*) from sys.objects go Цитата:
-----------
100 (1 row affected) ----------- 100 (1 row affected) Цитата:
If a SET statement runs in a stored procedure or trigger, the value of the SET option gets restored after the stored procedure or trigger returns control. Also, if you specify a SET statement in a dynamic SQL string that runs by using either sp_executesql or EXECUTE, the value of the SET option gets restored after control returns from the batch that you specified in the dynamic SQL string
на AX2012, при возможности проверю. T-SQL c NOCOUNT из X++ должен валиться P.S. подчеркнутое расходится с Цитата:
if you specify a SET statement in a dynamic SQL string that runs by using either sp_executesql or EXECUTE, the value of the SET option gets restored after control returns from the batch that you specified in the dynamic SQL string
__________________
-ТСЯ или -ТЬСЯ ? Последний раз редактировалось Vadik; 21.01.2021 в 23:22. |
|
|
За это сообщение автора поблагодарили: Logger (10). |
22.01.2021, 11:09 | #24 |
Участник
|
|
|
22.01.2021, 11:17 | #25 |
Модератор
|
Может кто-то прогнать скрипт на старых версиях SQL Server (2005, 2008б 2012) ? Он безобидный
__________________
-ТСЯ или -ТЬСЯ ? |
|
22.01.2021, 11:53 | #26 |
Участник
|
Цитата:
Цитата:
(строк обработано: 1)
(строк обработано: 1) Цитата:
(затронута одна строка)
(затронута одна строка) Могу ошибаться, но не исключено, что команда GO в окне Mangement studio сама по себе может сбрасывать какие-то переменные. Объявленные там же при помощи declare точно разные в разных секциях до GO. |
|
|
За это сообщение автора поблагодарили: Vadik (1). |
Теги |
ax2009, ax2012, ax2012r2, occ, set nocount on, sysclientsessions, ошибка, хранимые процедуры |
|
|