|
|
#1 |
|
Участник
|
Добрый день.
Предыстория: Переносил процедуру с тестовой SQL на рабочую и при компиляции получил ошибку, что SQL не знает такого индекса. Думаю, ладно может новый индекс и его не перенесли на рабочею, но не тут-то было. Индекс коробочной аксапты и находиться на слое SYS. Через форму администрирования пересоздал этот индекс. Все стала хорошо и SQL принял процедуру как родную. Тут у меня появилась мысль, а сколько еще индексов не хватает в SQL. Сделал запрос в SQL: PHP код:
Хорошо, теперь нужно как-то понять, сколько индексов должно быть. Нашел в системных таблицах 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)); } Тут я совсем расстроился и что-то приуныл. В 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); } P.S. AX2009, SQL 2008 |
|
|
|
|
#2 |
|
Участник
|
Наличие в Аксапте конфигурационных ключей и временных таблиц вы не учитываете?
Пробегитесь по DictTable и связанными с таблицами DictIndex, с учетом isSql() - тогда узнаете, сколько Аксаптовских объектов сохранено в БД
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|
| За это сообщение автора поблагодарили: demianimp (1). | |
|
|
#3 |
|
Участник
|
Цитата:
X++: ...
if(dictTable.isSql())
{
dictIndex = new DictIndex(utilIdElements.parentId, utilIdElements.id);
if(!dictIndex.isSql())
{
...
}
}
... |
|
|
|
|
#4 |
|
Участник
|
Не совсем)
isSql() показывает, что объект ДОЛЖЕН быть сохранен в сиквеле, с точки зрения Аксапты. Т.е. для отключенных конф. ключем объектов и временных таблиц isSql() вернет false А вот сохранен фактически он или нет - можно узнать только сделав запрос к метаданным самого сиквела
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|
|
#5 |
|
Участник
|
Цитата:
Сообщение от AndyD
Не совсем)
isSql() показывает, что объект ДОЛЖЕН быть сохранен в сиквеле, с точки зрения Аксапты. Т.е. для отключенных конф. ключем объектов и временных таблиц isSql() вернет false А вот сохранен фактически он или нет - можно узнать только сделав запрос к метаданным самого сиквела Чем больше с умными людьми общаюсь, тем больше понимаю на сколько ничтожны мои знания
|
|
|
|
|
#6 |
|
Модератор
|
Неправильно. Нужно один раз синхронизовать БД и перестать использовать индексные подсказки
__________________
-ТСЯ или -ТЬСЯ ? |
|
|
| Теги |
| ax2009, sql 2008, индекс |
|
|
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|