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