quarta-feira, 25 de julho de 2012

Verificando em quais stored procedures e views uma tabela está sendo utilizada

Oi pessoal! Um problema muito frequente que encontro é mapear quais stored procedures e views utilizam uma determinada tabela. Claro, este método não vai capturar usos indiretos, como uma stored procedure que consulta uma view que consulta a tabela desejada, mas sim se o nome da tabela consta no código da stored procedure. Portanto CLR procedures também estão de fora. Mas vamos à query, funciona em 2005 e 2008, ainda vou testar no 2012:

SELECT obj.Name as [Nome da procedure],
sc.TEXT as [Conteudo da procedure]
FROM sys.syscomments sc
INNER JOIN sys.objects obj ON sc.Id = obj.OBJECT_ID
WHERE sc.TEXT LIKE '%TABELA%' AND TYPE = 'P'

Onde está o texto TABELA, você deve colocar o nome da tabela em questão. Se as procedures utilizam a convenção de nomenclatura de schema + tabela (Exemplo: dbo.tabela) você vai achar os registros facilmente. Se o nome da sua tabela estiver contida no nome de outra tabela ou view e vocês não usar essa convenção de nomenclatura, bem, podem pintar alguns resultados errados, mas ainda assim afunila o volume de procedures a se inspecionar. 

Ah, e para pegar views, é barbadinha. Troque a linha:

AND TYPE = 'P'

Por:

AND TYPE = 'V'

E você listará as views onde o nome da tabela é encontrado. Pra manutenção em sistemas, é uma belezinha. Abração!

Um comentário:

  1. Mesmo não trabalhando ao seu lado, você continua me ajudando.
    Valeu Bona.

    Abraço!
    Guilherme Britz Videira

    ResponderExcluir