我有一个包含一千多个存储过程的数据库。为了优化目的,我需要列出包含七个以上连接操作的存储过程。
有没有办法做到这一点?
只需检查 INFORMATION_SCHEMA.ROUTINES 表中的 ROUTINE_DEFINITION 字段
SELECT ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES
where (LEN(ROUTINE_DEFINITION) -
LEN(REPLACE(ROUTINE_DEFINITION, 'JOIN', ''))) / LEN('JOIN')>=7
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