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 originalSELECT CAST(Col1 AS VARCHAR) FROM Tabla1 WHERE CAST(Col1 AS VARCHAR)='MiValor' UNION ALL
SELECT CAST(Col2 AS VARCHAR) FROM Tabla1 WHERE CAST(Col2 AS VARCHAR)='MiValor' UNION ALL
..
..
SELECT CAST(Col1 AS VARCHAR) FROM Tabla2 WHERE CAST(Col1 AS VARCHAR)='MiValor' UNION ALL
..
..
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 originalDECLARE @SQL VARCHAR(MAX);
SELECT @SQL=IsNull(@SQL+' Union All'+CHAR(13),'')+'Select Cast(['+name+'] As Varchar) From ['+Object_Name(object_id)+'] Where Cast(['+name+'] As Varchar)=''MiValor'''
FROM sys.COLUMNS
WHERE object_id IN (SELECT object_id FROM sys.TABLES);
Print @SQL;
EXEC(@SQL);
Ten en cuenta que el sistema te va a impripir solamente el principio de la cadena @SQL.