Добрый день.
Предыстория:
Переносил процедуру с тестовой 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