我将所有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 A,我会知道它会影响Proc B,Proc C步骤D等