Я сохраняю весь свой код VBA в таблицу SQL для его версии и записи изменений.
Одна вещь, которую я хотел сделать, которая не представляется возможной в самом VBA, - это найти зависимости между процедурами.(Proc A использует Proc B, Proc C использует Proc B, поэтому также использует Proc A и т. Д. И т. Д.)
У меня следующий запрос - я ищу отдельный список имен процедур для каждой строки кодадля каждой процедуры и присоединения, где есть совпадение.
SELECT DISTINCT
OrgSRC.VBE_PROC_NAME AS 'PROCEDURE' ,
OrgSRC.VBE_PROC_TYPE AS 'TYPE',
UseSRC.VBE_PROC_NAME AS 'USED_BY_PROC' ,
UseSRC.VBE_PROC_TYPE AS 'USED_BY_PROC_TYPE',
sum(1) over ( partition by UseSRC.VBE_PROC_NAME,OrgSRC.VBE_PROC_NAME) 'USED_BY_PROC_COUNT'
FROM VB_SOURCE_CODE OrgSRC
LEFT JOIN (
SELECT DISTINCT VBE_PROC_NAME ,VBE_PROC_TYPE, LTRIM(UPPER(VBE_CODE_DATA)) AS 'DTASRCH' FROM VB_SOURCE_CODE
WHERE VBE_UPDATE_DATE = ( SELECT MAX(VBE_UPDATE_DATE) FROM VB_SOURCE_CODE) AND LEFT (LTRIM(VBE_CODE_DATA),1)<>''''
) AS UseSRC ON
(UseSRC.DTASRCH LIKE '%'+OrgSRC.VBE_PROC_NAME+' %' OR UseSRC.DTASRCH LIKE '%'+OrgSRC.VBE_PROC_NAME+'(%' )
AND UseSRC.VBE_PROC_NAME <> OrgSRC.VBE_PROC_NAME
WHERE OrgSRC.VBE_UPDATE_DATE = ( SELECT MAX(VBE_UPDATE_DATE) FROM VB_SOURCE_CODE)
ORDER BY 1,3
Я получаю результаты обратно, для запуска требуется всего две минуты.Было бы быстрее / эффективнее использовать CTE?
Полагаю, в идеальном мире это было бы итеративно, пока не было найдено больше соединений, возвращающих n уровней, поэтому если я удалю ProcА, я бы знал, что это повлияет на Proc B, Proc C Proc D и т. Д.