Buscar este blog

jueves, 28 de abril de 2011

Buscar String en Jobs de una Base de Datos

Quién no ha pasado alguna vez por la necesidad de buscar un string dentro de N cantidad de Store Procedures correspondientes a una Base de Datos?

La tarea es por demás tediosa si se la encara "manualmente". Uds saben, no es muy práctico abrir cada sp y buscar el string presionando "f3".

Pues bien, les dejo un store procedure, el cual hace este trabajo de modo automático. Simplemente tienen que generarlo y luego ejecutarlo con dos parámetros, string a buscar y nombre de la base de datos.

Espero que sea de utilidad, saludos.

---------------------------------------------------------------------------
-- OBJECT NAME: p_FindText
-- DATE: 01/04/2011
-- INPUTS:
-- @StrFind -> Cadena a buscar
-- @VarDBName -> DB en la que se buscará el string
-- OUTPUTS: Nombres de SP que contienen la cadena buscada
-- DESCRIPTION:
/*
El método consta de utilizar una SP que busca entre las tablas de sistema
de una determinada DB, utilizando un LIKE contra el campo dónde el motor
guarda el texto de los SP. Es importante destacar que, obviamente, esto no
funciona con los SP encriptados. */
-----------------------------------------------------------------------------

CREATE PROCEDURE dbo.p_FindText
@strFind varchar (100),
@varDBName varchar (100)
as
BEGIN
declare @varQuery varchar (1000)
select @varQuery =
'SELECT distinct ' +
'name SP_Name, ''sp_helptext '''''' + name + ''''''''SP_HT ' +
'FROM [' + @varDBName + '].[dbo].[sysobjects] inner join [' + @varDBName + '].[dbo].[syscomments] ' +
'on [' + @varDBName + '].[dbo].[sysobjects].id = [' + @varDBName + '].[dbo].[syscomments].id ' +
'where xtype = ''P'' ' +
'and text like ''%' + @strFind + '%'' ' +
'order by name '
exec (@varQuery)
END


----------- Ejecutar el sp p_FindText ------------
DECLARE
@strFind varchar(100),
@varDBName varchar(100)

SELECT
@strFind = 'string a buscar',
@varDBName = 'Base de Datos'

EXEC p_FindText @strFind, @varDBName