2013-06-24 32 views
5

tôi biết làm thế nào để tìm được bảng có tên cột, bằng cách chạy:Tìm mà bảng có dữ liệu cột

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

gì tôi cần bây giờ, là để tìm thấy những bảng nào có dữ liệu cột nhất định. Không quan trọng cột nào thuộc về nó, tôi có thể tìm thấy nó, tôi chỉ không biết bàn nào để xem.

Tham gia các bảng này không phải là giải pháp vì có rất nhiều bảng.

Xin lỗi. cho tôi biết nếu bạn có ý tưởng. Cảm ơn.

+0

Thực tế, bạn sẽ phải có danh sách tất cả các bảng có thể (có thể là tất cả trong một lược đồ cụ thể?) Và sau đó truy vấn từng lược đồ. –

+0

thật là khó. nếu bạn sẽ làm theo cách đó, truy vấn tất cả các bảng của bạn cho một giá trị cột cụ thể, nó sẽ là kinda chậm và nặng. bạn nên xem xét đề nghị của @ DariusX –

+1

Bạn phải thu hẹp nỗ lực tìm kiếm của mình. Loại của bạn là gì tìm kiếm hạn (int, varchar vv)? ** Đưa ra một ví dụ thích hợp. ** Trong các cột thuộc loại nào bạn đang mong đợi giá trị của bạn có mặt (int, varchar, v.v ...)? Các kiểu tên (thập phân, datetime, dấu thời gian) và (hoặc) là gì (ví dụ: 'id', '% _id', v.v.) cho các cột cần được ** loại trừ ** khỏi danh sách tìm kiếm. – peterm

Trả lời

1

Thao tác này có phù hợp với bạn không?

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. vì vậy, có sys.tables và sys.columns? sẽ thử điều này. cảm ơn –

Các vấn đề liên quan