Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Buscar valor en todas las tablas

Estas en el tema de Buscar valor en todas las tablas en el foro de SQL Server en Foros del Web. Tengo una base de datos con muchas tablas con muchos campos (y con nombres para nada explícitos) y necesito saber si hay alguna manera de ...
  #1 (permalink)  
Antiguo 25/11/2012, 11:47
Avatar de Neldor  
Fecha de Ingreso: enero-2010
Mensajes: 52
Antigüedad: 14 años, 3 meses
Puntos: 1
Buscar valor en todas las tablas

Tengo una base de datos con muchas tablas con muchos campos (y con nombres para nada explícitos) y necesito saber si hay alguna manera de buscar un valor en cualquier columna en cualquier tabla de la base de datos para poder entender este desproposito.

Si alguien puede ayudarme estaré muy agradecido.
  #2 (permalink)  
Antiguo 25/11/2012, 23:57
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Buscar valor en todas las tablas

No existe una solución simple a esta tarea.
Se puede crear una consulta con todas las tablas y todas las columnas:
Código SQL:
Ver original
  1. SELECT CAST(Col1 AS VARCHAR) FROM Tabla1 WHERE CAST(Col1 AS VARCHAR)='MiValor' UNION ALL
  2. SELECT CAST(Col2 AS VARCHAR) FROM Tabla1 WHERE CAST(Col2 AS VARCHAR)='MiValor' UNION ALL
  3. ..
  4. ..
  5. SELECT CAST(Col1 AS VARCHAR) FROM Tabla2 WHERE CAST(Col1 AS VARCHAR)='MiValor' UNION ALL
  6. ..
  7. ..
  8. SELECT CAST(Coln AS VARCHAR) FROM Tablam WHERE CAST(Coln AS VARCHAR)='MiValor';
Debes utilizar SQL dinámico para crearla de las tablas del sistema (sys.columns por ejemplo).
Esta consulta será muy ineficiente (si en Tabla1 hay 10 columnas y 1,000,000 filas el sistema tendra que ejecutar 10 Table Scans..), y es absolutamente redundante buscar una cadena en columnas numéricas o de fechas.

Sin embargo, tu puedes intentar el siguiente código:
Código SQL:
Ver original
  1. DECLARE @SQL VARCHAR(MAX);
  2. SELECT  @SQL=IsNull(@SQL+' Union All'+CHAR(13),'')+'Select Cast(['+name+'] As Varchar) From ['+Object_Name(object_id)+'] Where Cast(['+name+'] As Varchar)=''MiValor'''
  3. FROM    sys.COLUMNS
  4. WHERE   object_id IN (SELECT object_id FROM sys.TABLES);
  5. Print   @SQL;
  6. EXEC(@SQL);
Ten en cuenta que el sistema te va a impripir solamente el principio de la cadena @SQL.
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #3 (permalink)  
Antiguo 26/11/2012, 12:46
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Buscar valor en todas las tablas

Tal vez esta sea lo que buscas:

http://gallery.technet.microsoft.com...3-5b31fe641c58
__________________
MCTS Isaias Islas

Etiquetas: campos, tablas, busquedas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:51.