AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.03.2007, 14:18   #1  
VORP is offline
VORP
Участник
Аватар для VORP
 
146 / 95 (4) ++++
Регистрация: 26.05.2006
Prepared Execution
Странное дело:
есть запрос:
while select inventJournalTrans
where inventJournalTrans.JournalId == _Id
{
,,,
inventJournalTransNEW.insertFromCode();

}
на самом деле вроде ращепления строк.
Под одним пользователем работает нормально, под другим зацикливается, то есть в курсор попадают новые строки, которые добавляются в цикле.
Различия в профайлере видны ниже:
нормально работает
declare @P1 int
set @P1=12
declare @P2 int
set @P2=180150008
declare @P3 int
set @P3=2
declare @P4 int
set @P4=2
declare @P5 int
set @P5=-1
exec sp_cursorprepexec @P1 output, @P2 output, N'@P1 varchar(1000),@P2 varchar(1000),@P3 numeric(28,12)', N'SELECT A.JOURNALID,A.LINENUM,A.TRANSDATE,A.VOUCHER,A.JOURNALTYPE,A.ITEMID,A.QTY,A.COSTPRICE,A.PRICEUNIT,A.COSTMARKUP,A.COSTAMOUNT,A.SALESAMOUNT,A.INVENTTRANSID,A.INVENTTRANSIDFATHER,A.LEDGERACCOUNTIDOFFSET,A.INVENTONHAND,A.COUNTED,A.DIMENSION,A.DIMENSION2_,A.DIMENSION3_,A.DIMENSION4_,A.DIMENSION5_,A.DIMENSION6_,A.DIMENSION7_,A.DIMENSION8_,A.DEL_LOG,A.BOMLINE,A.DEL_POSTED,A.DEL_CONFIGID,A.INVENTTRANSIDRETURN,A.INVENTDIMID,A.TOINVENTDIMID,A.REQPOID,A.EMPLID,A.ASSETTRANSTYPE,A.PROJTAXGROUPID,A.PROJSALESCURRENCYID,A.PROJTAXITEMGROUPID,A.PROJUNITID,A.INVENTREFTYPE,A.INVENTREFID,A.INVENTREFTRANSID,A.SCRAPTYPEID_RU,A.DEL_REPORTID_RU,A.DEL_OFFSESSIONID_RU,A.RECID FROM INVENTJOURNALTRANS A(UPDLOCK) WHERE ((DATAAREAID=@P1) AND ((JOURNALID=@P2) AND (QTY<>@P3))) OPTION(FAST 22)', @P3 output, @P4 output, @P5 output, 'rfn', 'СЖ00009264', 0.000000000000
select @P1, @P2, @P3, @P4, @P5

зацикливается
declare @P1 int
set @P1=15
declare @P2 int
set @P2=180150017
declare @P3 int
set @P3=2
declare @P4 int
set @P4=2
declare @P5 int
set @P5=-1
exec sp_cursorprepexec @P1 output, @P2 output, N'@P1 varchar(1000),@P2 varchar(1000),@P3 numeric(28,12)', N'SELECT A.JOURNALID,A.LINENUM,A.TRANSDATE,A.VOUCHER,A.JOURNALTYPE,A.ITEMID,A.QTY,A.COSTPRICE,A.PRICEUNIT,A.COSTMARKUP,A.COSTAMOUNT,A.SALESAMOUNT,A.INVENTTRANSID,A.INVENTTRANSIDFATHER,A.LEDGERACCOUNTIDOFFSET,A.INVENTONHAND,A.COUNTED,A.DIMENSION,A.DIMENSION2_,A.DIMENSION3_,A.DIMENSION4_,A.DIMENSION5_,A.DIMENSION6_,A.DIMENSION7_,A.DIMENSION8_,A.DEL_LOG,A.BOMLINE,A.DEL_POSTED,A.DEL_CONFIGID,A.INVENTTRANSIDRETURN,A.INVENTDIMID,A.TOINVENTDIMID,A.REQPOID,A.EMPLID,A.ASSETTRANSTYPE,A.PROJTAXGROUPID,A.PROJSALESCURRENCYID,A.PROJTAXITEMGROUPID,A.PROJUNITID,A.INVENTREFTYPE,A.INVENTREFID,A.INVENTREFTRANSID,A.SCRAPTYPEID_RU,A.DEL_REPORTID_RU,A.DEL_OFFSESSIONID_RU,A.RECID FROM INVENTJOURNALTRANS A(UPDLOCK) WHERE ((DATAAREAID=@P1) AND ((JOURNALID=@P2) AND (QTY<>@P3))) OPTION(FAST 22)', @P3 output, @P4 output, @P5 output, 'rfn', 'СЖ00009264', 0.000000000000
select @P1, @P2, @P3, @P4, @P5
exec sp_cursorclose 180150008

Жирным выделены различия.
То есть во втором случае курсор всякий раз открывается и закрывается заново, что и приводит к зацикливанию(?).

Вопросы:
1. Что за первый параметр у sp_cursorprepExec?
2. Может ли кто нибудь подсказать - от чего же зависит исполнение в данном случае?

Функцию я переписать могу, просто интересно.
Спасибо.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axaptafreak: Don't trust the execution plan within AX Blog bot DAX Blogs 1 22.12.2007 23:18
Pokluda: SysTest part V.: Test execution (results, runners and listeners) Blog bot DAX Blogs 0 28.10.2006 17:43
Pokluda: SysTest part IV.: Test/Suite initialization and cleaning; Execution isolation Blog bot DAX Blogs 0 28.10.2006 17:43

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:01.