比较结构化数据与非结构化数据-同一表查询还是联接?

时间:2018-12-31 15:04:10

标签: sql-server query-optimization

我将所有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等

0 个答案:

没有答案