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:
- correggere la prima istruzione
USE <database>
indicando il database desiderato - 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………