2013-06-24 5 views
5

を持つテーブル検索:私は実行することによって、その列名を持つテーブルを見つける方法を知っていると、その列のデータ

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

私は今必要なもの、テーブルは、特定の列のデータということ持っている見つけることです。 どの列が属するかは関係ありませんが、私はそれを見つけることができます、私はちょうどどの表を見るかわかりません。

多くのテーブルがあるため、これらのテーブルに結合することは解決策ではありません。

Pls。アイデアがあればお知らせください。おかげさまで

+0

実際には、すべての可能なテーブル(おそらく1つの特定のスキーマ内のすべて)のリストを取得し、それらのそれぞれを照会する必要があります。 –

+0

それはちょっと難しいです。そのようにすれば、すべてのテーブルに特定の列の値を問い合わせると、それはちょっと遅くて重いでしょう。あなたは@ DariusXの提案を考慮する必要があります –

+1

検索の努力を絞り込む必要があります。あなたの検索語はどんなタイプですか(int、varcharなど)? **関連する例を与えてください。**あなたの値が存在すると予想しているタイプの列(int、varcharなど)で?検索リストから**除外する必要がある列のタイプ(10進数、日時、タイムスタンプ)と名前パターン(「id」、「%_id」など)は何ですか。 – peterm

答えて

1

これはあなたの仕事ですか?

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。だから、sys.tablesとsys.columnsがありますか?これを試みます。ありがとう –