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)
Como puedo hacer lo mismo en access, ya que tengo varias tablas pero mis busquedas las realizo con codigo en sql…
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.
Gracias. Ha sido una ayuda buenísima.
La verdad se me hace algo rebuscado la forma en la que se busca. Se podria realizar solo por sentencia sql sin procedimientos?
Muchas gracias Jose, fue de gran ayuda.
FUNCIONA EXCELENTE.
ME HA AHORRADO UN BUEN TIEMPO
Es una cosa de locos, es una maravilla
Muy bueno pero funcina para nuemeros???
Si funciona con numeros ya lo probé, Gracias
me parace interesante el codigo lo tengo que checar ya que me lo pidieron en el trabajo, luego les platico como me fue
Excelente funciona de maravilla
Buscando he encontrao un tocayo curramos en lo mismo, un saludo 😉
Esto es buenisimo, pero…. ¿tb funciona en sql plus?
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.
EXCELENTE aporte me ha servido de mucho….. 🙂
ME sirvio perfectamente GRACIAS!!!
Gracias, funciona!
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!!!
me gustaria saber si se puede hacer eso en excel tambien o nadamas en sql
excelente que ahoro de tiempo
GRACIAS JOSE, ES UNA EXCELENTE SOLUCION LA QUE NOS HAS COMPARTIDO
access no se usa mas
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.
Interesante, y no se podria hacer esto con un SELECT ?? no puedo crear SP en la BD…
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..
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.
MUY BUENO, me vino de 10. gracias!!!
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!
EXELENTE APORTE….. ME MUESTRA LAS TODAS TABLAS PARA CAMBIAR UN REGISTRO EN ESPECIFICO…GRACIAS DE ****GRAN UTILIDAD****
excelente ayuda amigo . recomendado -..
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’)
Muchas gracias!!!
Me ha encantado!! Muchas gracias
El query funciona pero es solo para una base de datos…
Anda perfecto, pero te hago una consulta tengo manera de obtener el id del campo que estoy trayendo? Gracias
oye, yo nunca dejo comentarios, pero en este caso, MIL GRACIAS me sacaste de tremendo apuro.
Gracias de verdad
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.
Muchisimas gracias. Este tipo de aportaciones nos ayudan mucho a todos.
Perfecto, y muy útil. Muchas gracias
Muchisimas Gracias!! Ha sido de gran utilidad!!
Saludos!
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
Oye muchas gracias de verdad que funciona perfectamente!