1

我有一个包含一千多个存储过程的数据库。为了优化目的,我需要列出包含七个以上连接操作的存储过程。

有没有办法做到这一点?

4

2 回答 2

6

只需检查 INFORMATION_SCHEMA.ROUTINES 表中的 ROUTINE_DEFINITION 字段

SELECT ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES 
where (LEN(ROUTINE_DEFINITION) - 
       LEN(REPLACE(ROUTINE_DEFINITION, 'JOIN', ''))) / LEN('JOIN')>=7
于 2013-07-22T12:26:47.710 回答
2

ROUTETINE_DEFINITION 最多包含 4000 个字符。如果您有大型存储过程,它可能找不到所有连接。

object_definition 可以包含超过 10000 个字符,请尝试以下代码:

SELECT 
    name
FROM sys.procedures
WHERE 
    ((len(object_definition(object_id)) - len(replace(object_definition(object_id)  , 'JOIN', ''))) / 4) >= 7
于 2013-07-22T12:43:53.270 回答