Cómo buscar un dato en toda la base de datos SQL Server

Esto lo lei en Internet y me ha parecido muy interesante, así que como estos días no tengo mucho tiempo de escribir cosas propias lo comparto aquí. Puede resultar de muchísima utilidad.


Hay veces en las que queremos buscar un determinado dato pero no sabemos en qué tabla o campo está, por lo que sería muy útil poder hacerlo en toda la base de datos al mismo tiempo.


El siguiente procedimiento almacenado permite conseguirlo:


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


Para buscar algo basta con escribir lo siguiente:


EXEC SearchAllTables ‘texto a buscar’


(sacado de http://vyaskn.tripod.com/search_all_columns_in_all_tables.htm)

Sin categoría

42 thoughts on “Cómo buscar un dato en toda la base de datos SQL Server

  1. Buff, mucho me temo que en Access no puedes hacer nada similar a esto. Yo al menos no sé cómo hacerlo.

    Seguramente sí se podría hacer usando ADO para enumerar las tablas y sus campos y luego buscar en ellos, pero necesitarías un programa.

    Saludos

    JM.

  2. En comentarios anteriores dice que funciona tambien con números… ya lo probé con campos no numéricos y funciona perfecto, pero con campos númericos no he logrado encontrar valores…

    ¿ Cómo debo buscarlos?… Gracias de antemano.

  3. Expectacular estaba a punto de sacar algo parecido hasta que pense inventar otra vez la rueda… naaa busque y encontre esto asi que se agradece!!!

  4. Cuando quiero crear el procedimiento me sale:

    Mens 102, Nivel 15, Estado 1, Procedimiento spu_EstaEnNumerosRojos, Línea 5
    Incorrect syntax near ‘BEGIN’.

    Alguna idea ? Gracias.

  5. Es excelente codigo, principalmente para inyectar este código a los portales web que no están bien protegidos.

    Obtienes información muy buena..

    Saludos..

  6. Muchas gracias por el código, soy principiante en ésto y acabo de desarrollar una pequeña aplicación para administrar una BD en SQL server y me adentré tanto que quise dejarla lo más completa posible y tu aporte me ha sido de mucha utilidad.

  7. Saludos, esto me ha venido realmente bien para poder encontrar algunas diferencias que tenia en algunas tablas, ya que busca sin Case Sentitive, si busco «Pepe» me devuelve no solo Pepe sino tambien pepe XxpepeXX -pepe- etc. etc.
    Muchas Gracias, Gran Aporte!

  8. Para poder buscar sobre datos numéricos habría que modificar la sentencia:
    AND DATA_TYPE IN (‘char’, ‘varchar’, ‘nchar’, ‘nvarchar’)

    agregando mas parametros como:
    AND DATA_TYPE IN (‘char’, ‘varchar’, ‘nchar’, ‘nvarchar’, ‘real’, ‘int’)

  9. Necesito el scrisp sql para traer los datos correspondientes a una determinada cedula la cual digito en un formulario.php y la envio por metodo post al otro formulario.php, que es donde debo mostrar dichos datos.
    Estoy aprendiendo a programar en Php y mysql.
    Gracias por su ayuda.

  10. Muchas gracias y un excelente aporte funciono a la perfeccion y siempre es grato encontrar a personas que comparten tanto sus conocimientos como sus hallazgos MUCHAS GRACIAS

Responder a anonymous Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *