Transact-Sql: ricerca di una stringa nei moduli SQL

Vi è mai capitato di dover trovare tutti i riferimento ad un campo che possono essere sparsi in giro per il database? Sì? Allora siete capitati nel posto giusto! Con lo script di oggi andremo a caccia di ogni posto dove possiamo trovare il campo. Il tutto comodamente a casa vostra per la modica cif… No, scusate mi sono lasciato prendere la mano.

Tornando seri, lo script effettua la ricerca della stringa basandosi su due distinte SELECT che poi vengono messe in UNION tra loro: la prima ricerca la stringa tra i nomi delle colonne delle tabelle, mentre la seconda la ricerca all’interno dei moduli (stored procedures, functions, viste, etc.)

IMPORTANTE : prima di eseguire lo script, è assolutamente necessario:

  1. correggere la prima istruzione USE <database> indicando il database desiderato
  2. nella istruzione SET @NomeCampo = 'RagioneSociale'; occorre indicare la stringa che si vuole ricercare
/*  --- Ricerca Le Dipendenze Di Un Campo
    --- v. 1.0
    --- 2012.02.09
    --- Marco Turrini
    --- Ricerca le dipendenze di un campo, ossia dove questo viene usato
        all'interno del database
    --- N.B.: è necessario eseguire lo script puntando già al database corretto
*/
USE ;
GO

DECLARE @NomeCampo as nvarchar(max);
SET @NomeCampo = 'RagioneSociale';

SELECT [Oggetto] = [objects].[name]
     , [Tipo] = 'SQL_USER_TABLE'
    FROM [sys].[columns]
    INNER JOIN [sys].[objects]
        ON [objects].[object_id] = [columns].[object_id]
       AND [objects].[type] = 'U'
    WHERE [columns].[name] LIKE N'%' + @NomeCampo + N'%'

UNION

SELECT [Oggetto] = [objects].[name]
     , [Tipo] = [objects].[type_desc]
    FROM [sys].[objects]
    INNER JOIN [sys].[sql_modules]
        ON [sql_modules].[object_id] = [objects].[object_id]
       AND [sql_modules].[definition] LIKE N'%' + @NomeCampo + N'%'

ORDER BY [Tipo], [Oggetto];

Avete notato che ho continuamente fatto riferimento alla “stringa” da ricercare, anziché al “nome del campo”? Il motivo è molto semplice: questo script può trovare il riferimento a qualsiasi stringa nel database, non necessariamente ad un nome di campo. Comodo, vero? E il tutto comodamente a casa vostra per la modica cif………

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

*