SQL Server: Localizar JOBs que usam uma determinada tabela 📑

📋 Descrição

Ao administrar um banco de dados no SQL Server, pode ser necessário identificar procedures, funções ou views que fazem referência a uma tabela específica. Isso é útil em situações como:

  • Refatoração e manutenção: Saber quais objetos dependem de uma tabela antes de modificá-la.
  • Auditoria de impacto: Evitar que alterações causem erros em processos dependentes.
  • Depuração e troubleshooting: Identificar onde uma tabela específica é utilizada para investigar problemas de performance ou falhas no sistema.

Este artigo apresenta uma query para listar procedures (stored procedures), funções e views que referenciam uma tabela específica.



🛠️ Estrutura da Query

A consulta abaixo busca no banco de dados objetos (Procedures, Views e Functions) que contêm no código SQL a referência a uma tabela específica.

USE [NomeDoBanco] 
GO 
SELECT 
A.NAME AS objeto_nome, 
A.TYPE AS objeto_tipo, 
B.TEXT AS script_sql 
FROM 
    SYSOBJECTS A (NOLOCK) 
        JOIN SYSCOMMENTS B (NOLOCK) 
            ON A.ID = B.ID 
WHERE 
    B.TEXT LIKE '%NomeDaTabela%' -- Substituir pelo nome da tabela desejada 
    AND A.TYPE = 'P' -- Filtra apenas stored procedures (P). Pode ser alterado para 'V' (views) ou 'FN' (funções) 


📊 Explicação da Query

    ✅ SYSOBJECTS: Contém informações sobre os objetos do banco de dados, como stored procedures, views e funções.
    ✅ SYSCOMMENTS: Armazena o texto-fonte dos objetos que contêm código SQL.
    ✅ LIKE '%NomeDaTabela%': Faz a busca textual dentro do código dos objetos SQL.
    ✅ TYPE = 'P': Filtra apenas procedures. Pode ser ajustado para 'V' (views) ou 'FN' (funções).
    ✅ NOLOCK: Evita bloqueios na leitura dos metadados, mas pode trazer resultados inconsistentes se houver alterações simultâneas.



💡 Exemplo de Uso

Se quisermos encontrar procedures que utilizam a tabela Clientes, basta substituir NomeDaTabela por Clientes na cláusula LIKE. O resultado pode ser algo assim:

objeto_nome
objeto_tipo
script_sql
sp_Atualiza_Cliente
P (Procedure)
UPDATE Clientes SET Nome = ...
sp_Busca_Cliente
P (Procedure)
SELECT * FROM Clientes WHERE ...
sp_Exclui_Cliente
P (Procedure)
DELETE FROM Clientes WHERE ...

Se quisermos incluir views e funções, podemos alterar a cláusula WHERE para incluir 'V' e 'FN':

AND A.TYPE IN ('P', 'V', 'FN') 

Isso retornaria também views e funções que referenciam a tabela.



🚀 Conclusão

Esta query permite auditar e localizar objetos SQL que fazem referência a uma determinada tabela, sendo útil para evitar impactos negativos ao modificar tabelas e para entender a estrutura do banco de dados.

Utilize essa consulta antes de modificar tabelas para evitar que mudanças afetem processos críticos! 🔥

 

Data de Publicação: 08-04-2024

Categoria: SQL Server