Ver Mensaje Individual
  #2 (permalink)  
Antiguo 25/11/2012, 23:57
GeriReshef
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 10 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