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

3 comentarios:

  1. Buenas mi nombre es Juan Pablo Lettieri. Te quiero agradecer mucho este post. Te tomo prestado el script. Saludos desde Neuquen capital.

    ResponderEliminar
  2. Este comentario ha sido eliminado por un administrador del blog.

    ResponderEliminar
  3. Felicidades por la web y los artículos de utilidad.
    Me preguntaba si existe forma de controlar el porcentaje realizado por ejemplo: ALTER INDEX ALL ON dbo.tabla REORGANIZE, es decir alguna forma de monitorizar el avance de la query, para conocer el estado de la misma.

    ResponderEliminar