Home Buscar sql Buscar un valor dentro de una base de datos SQL

Buscar un valor dentro de una base de datos SQL

by ricard
376 views

Hola a todos hace unos días un compañero tenía que buscar un campo en concreto dentro de una base de datos SQL Server Bestial.

Decididos a encontrar una solución al respecto en contramos el siguiente StoredProcedure que hacía esta función. Gracias a el hemos encontrado dicho campo en question de minutos.

Desde aquí agradezco a “Narayana Vyas Kondreddi” por la gran contribución que ha hecho a la comunidad.

Advertencias Varias:

Este procedimiento almacenado tiene varias cosas a tener en cuenta:

Es recomendable NO arrancar este procedimiento en Base de datos muy grandes, ya que como podeís ver busca en todos los campos de todas las tablas…..

Espero que sea de ayuda:

–To search all columns of all tables in Pubs database for the keyword “Computer”
EXEC SearchAllTables ‘Computer’
GO

Here is the complete stored procedure code:

CREATE PROC SearchAllTables
(
@SearchStr nvarchar(100)
)
AS
BEGIN

— Copyright © 2002 Narayana Vyas Kondreddi. All rights reserved.
— Purpose: To search all columns of all tables for a given search string
— Written by: Narayana Vyas Kondreddi
— Site: http://vyaskn.tripod.com
— Tested on: SQL Server 7.0 and SQL Server 2000
— Date modified: 28th July 2002 22:50 GMT

CREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630))

SET NOCOUNT ON

DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)
SET @TableName = ”
SET @SearchStr2 = QUOTENAME(‘%’ + @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’)
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 ‘ + @SearchStr2
)
END
END
END

SELECT ColumnName, ColumnValue FROM #Results
END

Una vez creado el Stored Procedure podemos ejecutar la siguiente sentencia:

Exec StoredProcedure SearchAllTables ‘Palabra_a_buscar’

Solo nos quedará esperar a que finalice el proceso.

You may also like

1 comment

Anonymous 2 mayo, 2011 - 4:42 pm

Gracias me ha salvado la vida !!

Reply

Leave a Comment

* By using this form you agree with the storage and handling of your data by this website.

Este sitio web utiliza cookies para mejorar tu experiencia. Asumiremos que estás de acuerdo con esto, pero puedes optar por no participar si lo deseas. Aceptar Leer Más

Privacy & Cookies Policy