Показать сообщение отдельно
Старый 30.12.2022, 16:49   #9  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,656 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Пока получается, что непосредственно в среде SQL имя индекса не хранится и его значение проще сконструировать самостоятельно

X++:
/*
Имя индекса в SQL

Пример:	I_007CustomerPaymentFeeLedgerDimensionI7 для таблицы BankAccountTable

1. "I_" - константа (буква i). Указывается у всех индексов
2. 007 - значение TableId, но не менее 3 знаков. Недостающая длина дополняется ведущими нулями.
3. CustomerPaymentFeeLedgerDimensionI - имя индекса в Axapta. Имя может быть обрезано с конца. См п.4
4. 7 - если общая длина из первых 3 частей превышает 40 символов, то в конец добавляется значение Id индекса как есть, 
а общая длина имени уменьшается до 40 символов за счет обрезания концевой части имени индекса в Axapta (п.3) 
*/

select 
	t2.AXID as tabId,
	t2.NAME	as tableName,
	t1.AXID	as indexId,
	t1.NAME	as indexName,
	iif(len('I_' + format(t2.AXID, 'd3') + t1.NAME) <= 40
		,'I_' + format(t2.AXID, 'd3') + t1.NAME
		,substring('I_' + format(t2.AXID, 'd3') + t1.NAME, 1, 40 - len(cast(t1.AXID as nvarchar(10)))) + cast(t1.AXID as nvarchar(10))
		) as indexNameSQL
	 
from SYSMODELELEMENT t1
join SYSMODELELEMENT t2 on t2.RecId = t1.PARENTMODELELEMENT and t2.ELEMENTTYPE = 44
where t1.ELEMENTTYPE = 43
    and t2.Name = 'BankAccountTable'
    --and t1.Name = 'CustomerPaymentFeeLedgerDimensionIdx'
order by t2.name, t1.Name
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: trud (5), Logger (3).