Сравнение структурированных данных с неструктурированными данными - тот же запрос таблицы или объединение? - PullRequest
0 голосов
/ 31 декабря 2018

Я сохраняю весь свой код 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 и т. Д.

...