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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.11.2015, 09:01   #1  
demianimp is offline
demianimp
Участник
 
202 / 104 (4) +++++
Регистрация: 10.10.2013
Red face Разное количество индексов в axapta и sql
Добрый день.

Предыстория:
Переносил процедуру с тестовой SQL на рабочую и при компиляции получил ошибку, что SQL не знает такого индекса. Думаю, ладно может новый индекс и его не перенесли на рабочею, но не тут-то было. Индекс коробочной аксапты и находиться на слое SYS. Через форму администрирования пересоздал этот индекс. Все стала хорошо и SQL принял процедуру как родную.

Тут у меня появилась мысль, а сколько еще индексов не хватает в SQL.



Сделал запрос в SQL:
PHP код:
select count(*)
from sysobjects t 
inner join sysindexes i on t
.id i.id where i.name like 'I_%' 
вернул число 5496.

Хорошо, теперь нужно как-то понять, сколько индексов должно быть.
Нашел в системных таблицах UtilIdElements и UtilElements.
Вопрос к сообществу №1: В чем разница между UtilIdElements и UtilElement?
Через обозреватель таблиц на первый взгляд информация одинаковая.

X++:
static void utilIdElementsCount(Args _args)
{
    UtilIdElements  utilIdElements;
    ;
    select count(RecId)
        from utilIdElements order by parentId
        where utilIdElements.recordType == UtilElementType::TableIndex;

    
    info(int2str(utilIdElements.RecId));
}
вернул число 6623.

Тут я совсем расстроился и что-то приуныл. В SQL не хватает 1/6 индексов.

Далее мое извращенное сознание извергла следующий алгоритм:
X++:
static void getListIndexNameSql(Args _args)
{
    UtilIdElements  utilIdElements;
    DictTable       dictTable;
    str             textRow = 'Имя таблицы SQL;Имя таблицы;Имя индекса SQL;Имя индекса;Код таблицы;Код индекса\n';
    ;
    while select utilIdElements order by parentId
        where utilIdElements.recordType == UtilElementType::TableIndex
    {
        if(tableId2Name(utilIdElements.parentId) != 'UNKNOWN')
        {
            dictTable = new DictTable(utilIdElements.parentId);

            textRow += strFmt('%1;%2;%3;%4;%5;%6\n', 
                              dictTable.name(DbBackend::Sql), 
                              dictTable.name(), 
                              dictTable.indexName(utilIdElements.id, DbBackend::SQL), 
                              utilIdElements.name, 
                              utilIdElements.parentId, 
                              utilIdElements.id);
        }
    }

    info(textRow);
}
Вопрос к сообществу №2: Насколько корректны полученные данные? Если другой способ получение индексов, которые должны быть по версии axapta?

P.S. AX2009, SQL 2008
Теги
ax2009, sql 2008, индекс

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как узнать имя пользователя Axapta на SQL? Didukh84 DAX: Программирование 36 06.02.2014 14:14
SQL с базой Axapta занимает всю оперативную память alesander DAX: Администрирование 9 23.06.2010 12:45
Версия SQL 2005 Axapta 4.0 и Axapta 2009 tolstjak DAX: Администрирование 8 10.11.2009 11:11
Как же все таки добраться из Axapta до SQL Кандидат DAX: Программирование 5 02.12.2005 11:50

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

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

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