Às vezes, nossos desenvolvedores escrevem uma consulta que usa cursores, mas não os fecha explicitamente. Estou tentando gerar uma lista de objetos ativos no meu banco de dados de produção que usam cursores, mas não os fecham/desalocam explicitamente. Para fazer isso, escrevi uma instrução simples que faz o trabalho, mas é extremamente lenta:
select distinct name,
definition
from SYS.SQL_MODULES
inner join SYS.OBJECTS O
on SQL_MODULES.OBJECT_ID = O.OBJECT_ID
where SQL_MODULES.DEFINITION like '%open%'
and SQL_MODULES.DEFINITION like '%declare % cursor%'
and ( SQL_MODULES.DEFINITION not like '%close%'
or SQL_MODULES.DEFINITION not like '%deallocate%' )
Atualmente, isso leva algo como 3 minutos para ser executado. Existe uma maneira melhor de obter as informações que estou procurando?