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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.02.2017, 13:29   #19  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,666 / 1172 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Pandasama Посмотреть сообщение
выдает результаты:
5637264076
5637264327
5637264077

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

5637274077

Обратите вниманием на окончание: 74077, а не 64077, как у Вас. Возможно, Вы просто невнимательно посмотрели на число в этом разряде?


Цитата:
Сообщение от Pandasama
(чтобы не разбивать запрос на две части - подсчет количество и саму вставку)

Разбивать по любому придется.

Дело в том, что Axapta резервирует часть значение RecId. Т.е. определение значения по полю таблицы systemsequences.nextval ни о чем не говорит. Далеко не факт, что именно это значение и будет использовано в среде Axapta для генерации следующего значения. Как следствие, Вы рискуете присвоить не корректные значения RecId. Те, с которыми позже произойдет пересечение при обычной работе Axapta

Другими словами недопустимо на основании systemsequences.nextval сфоромировать RecId, а потом попросить Axapta зарезервировать NN значений. Не получится, поскольку Axapta может начать резервирование вовсе не с того значения, которое указано в systemsequences.nextval


Кроме того, с предварительным запросом во временную таблицу проще организовать нумерацию, при этом задержка по времени незначительная. У меня получается примерно так

X++:
// Этап 1 выборка во временную таблицу
if object_id('tempDB..#NewData') is not null drop table #NewData;
select
       (...)
      , identity(int,1,1) as RowNum
into #NewData
from (...)

// Подсчет записей. Это значение считываем в Axapta
select count(*) from #NewData

// Этап 2
// Резервирование RecId в Axapta 
// И передача начального номера RecId в SQL

// Этап 3 - Вставка в итоговую таблицу
//               beginRecId - переданное начальное значение

insert into MyTable 
      (...
      ,RecId
      )
select 
      ...
     , #NewData.RowNum - 1 + beginRecId
from #NewData
Я использую динамическое формирование запроса в среде Axapta, поэтому временные таблицы. Если использовать хранимые процедуры SQL, то придется делать постоянные таблицы
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...

Последний раз редактировалось Владимир Максимов; 02.02.2017 в 13:41.
Теги
ax2009, recid, sql, systemsequences

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
SystemSequences - Выделение RecId kashperuk DAX: Программирование 11 27.08.2013 15:02
ax2009. зачем нужно создавать индекс по recID, если включены CreatedDateTime или ModifiedDateTime? mazzy DAX: Программирование 1 17.07.2011 23:01
Формирование RecId при вставке в таблицу AX из SQL Server Hyper DAX: Программирование 20 28.06.2011 17:30
axforum blogs: Переделываем RecId в таблицах Blog bot DAX Blogs 0 06.05.2011 19:11
aEremenko: Дефрагментация RecID Blog bot DAX Blogs 2 06.03.2007 22:25

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:01.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.