2013-06-24 13 views
5

So come trovare quale tavolo ha quel nome di colonna, eseguendo:Trova quale tabella è che i dati della colonna

select * From INFORMATION_SCHEMA.COLUMNS Where column_name = 'column value' 

cosa ho bisogno ora, è quello di trovare le tabelle hanno che alcuni dati della colonna. Non importa quale colonna appartenga, posso trovarla, semplicemente non so quale tabella guardare.

Unire queste tabelle non è una soluzione, poiché ci sono molte tabelle.

Pls. fammi sapere se hai idee. Grazie.

+0

In pratica, è necessario ottenere un elenco di tutte le tabelle possibili (probabilmente tutte in uno schema particolare?) E quindi eseguire una query su ciascuna di esse. –

+0

è piuttosto difficile. se lo facessi in quel modo, interrogando tutte le tue tabelle per un valore di colonna specifico, sarebbe un po 'lento e pesante. dovresti prendere in considerazione il suggerimento di @DariusX –

+1

Devi restringere i tuoi sforzi di ricerca. Di che tipo è il termine di ricerca (int, varchar etc)? ** Dai un esempio pertinente. ** In colonne di quale tipo ti aspetti che il tuo valore sia presente (int, varchar, ecc.)? Quali sono i tipi (decimale, datetime, timestamp) e (o) i nomi (ad esempio "id", "% _id", ecc.) Per le colonne che dovrebbero essere ** escluse ** dall'elenco di ricerca. – peterm

risposta

1

Questo farà il lavoro per voi?

declare @data varchar(50) 
    ,@sql varchar(max) 
select @data = '%test%' 

create table #Temp ([Table] varchar(200), [Column] varchar(200), [Data] varchar(max)) 

select @sql = isnull(@sql, '') + 'insert into #Temp select ''' + sys.tables.name + ''', ''' + sys.columns.name + ''', ' + sys.columns.name + ' from [' + sys.tables.name + '] where [' + sys.columns.name + '] like ''' + @data + ''';' 
from sys.tables 
inner join sys.columns 
    on sys.columns.object_id = sys.tables.object_id 

exec(@sql) 

select * from #Temp order by [Table], [Column] 
drop table #Temp 
+0

ah..ok. quindi, ci sono sys.tables e sys.columns? proveremo questo Grazie –

Problemi correlati