2013-06-24 11 views
5

मैं जो तालिका स्तंभ नाम है खोजने का तरीका जान है, चलाकर:खोजें जो तालिका स्तंभ डेटा

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

क्या मैं, अब जरूरत है खोजने के लिए जो टेबल कुछ स्तंभ डेटा कि है। इससे कोई फ़र्क नहीं पड़ता कि यह कौन सा कॉलम है, मैं इसे पा सकता हूं, मुझे नहीं पता कि कौन सी तालिका को देखना है।

इन तालिकाओं में शामिल होना समाधान नहीं है, क्योंकि बहुत सारी टेबल हैं।

Pls। अगर आपके पास विचार हैं तो मुझे बताएं। धन्यवाद।

+0

व्यावहारिक रूप से, आपको सभी संभावित तालिकाओं (शायद सभी एक विशेष स्कीमा में) की एक सूची प्राप्त करनी होगी और फिर उनमें से प्रत्येक से पूछताछ करें। –

+0

कि यह बहुत कठिन है। यदि आप इसे इस तरह से करेंगे, तो अपने सभी टेबल को एक विशिष्ट कॉलम मान के लिए पूछताछ करते हुए, यह थोड़ी धीमी और भारी होगी। आपको @ DariusX के सुझाव –

+1

पर विचार करना चाहिए आपको अपने खोज प्रयासों को कम करना होगा। आपका खोज शब्द किस प्रकार है (int, varchar आदि)? ** एक प्रासंगिक उदाहरण दें। ** कॉलम में आप किस प्रकार के मूल्य को पेश करने की उम्मीद कर रहे हैं (int, varchar, आदि)? कॉलम के लिए प्रकार (दशमलव, डेटाटाइम, टाइमस्टैम्प) और (या) नाम पैटर्न (उदा। 'आईडी', '% _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 है? की कोशिश करेंगे। धन्यवाद –

संबंधित मुद्दे