PROCEDIMIENTO ALMACENADO EN SQL SERVER PARA BUSCAR TEXTO EN LAS BASES DE DATOS.


Buenas,


En este post, queremos hablar de un procedimiento almacenado para buscar un texto determinado en alguna base de datos. Desde el punto de vista de soporte esto es bastante útil, a fin de tratar de encontrar determinadas cadenas de texto, en una base de datos u otras, y así poder determinar posibles causas de funcionamiento, error, etc.


Debemos ejecutar la siguiente consulta SQL en el Analizador De Consultas, en la base de datos en la cual queremos buscar el texto que nos interesa; si queremos que este procedimiento almacenado esté disponible para todas las bases de datos, debemos ejecutarlo en la base de datos master.


SET ANSI_NULLS ON


GO


SET QUOTED_IDENTIFIER ON


GO



create PROC [dbo].[SearchAllTables](@SearchStr nvarchar(100)) AS


BEGIN


CREATE TABLE #Results (ColumnName text, ColumnValue text)



SET NOCOUNT ON



DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)


SET @TableName = ''


SET @SearchStr2 = QUOTENAME('%' + rtrim(@SearchStr)+'%' ,'''')



WHILE @TableName IS NOT NULL


BEGIN


SET @ColumnName = ''


SET @TableName =


(


SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))


FROM INFORMATION_SCHEMA.TABLES


WHERE TABLE_TYPE = 'BASE TABLE'


AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName


AND OBJECTPROPERTY(


OBJECT_ID(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)), 'IsMSShipped') = 0


)



WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)


BEGIN


SET @ColumnName =


(


SELECT MIN(QUOTENAME(COLUMN_NAME))


FROM INFORMATION_SCHEMA.COLUMNS


WHERE TABLE_SCHEMA = PARSENAME(@TableName, 2)


AND TABLE_NAME = PARSENAME(@TableName, 1)


AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar', 'uniqueidentifier','tinyint', 'smallint', 'int')


AND QUOTENAME(COLUMN_NAME) > @ColumnName


)



IF @ColumnName IS NOT NULL


BEGIN


INSERT INTO #Results


EXEC


(


'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630)


FROM ' + @TableName + ' (NOLOCK) ' +


' WHERE ' + @ColumnName + ' LIKE ' + 'rtrim(' + @SearchStr2 + ')'


)


END


END


END



SELECT ColumnName, ColumnValue FROM #Results print @searchstr2


END


Para usar este procedimiento almacenado, debemos ejecutarlo de la siguiente manera, en el Analizador de Consultas de SQL Server:


exec SearchAllTables '[texto a buscar]’


Esperamos os resulte de utilidad


Muchas gracias un saludo


Jorge Puig

Comments (0)

Skip to main content