搜索sql server中的所有表和所有列

我们平时做调查的时候,经常会疑惑某个数据到底是从哪来的,往往使用事件查看器之类的捕捉sql来找,其实我们也可以用下边这条sql试试。不过在数据量大的时候确实是比较慢。

 

drop table #
declare @t  varchar(255),@c  varchar(255)
create table # (name varchar(256),cols varchar(4000))
declare  table_cursor  cursor  for 
select  a.name,b.name  from  sysobjects  a,syscolumns  b 
where  a.id=b.id  and  a.xtype='U' and b.xtype in (35,99,167,175,231,239)

--上边这几个数字是我从sys.types查出来的,限制了只搜索文本类型,具体使用的时候可以自行修改
open  table_cursor  fetch  next  from  table_cursor 
into  @t,@c 
while(@@fetch_status=0)
begin 
    exec('
set nocount on
if exists(select top 1 '+@c+' from [' + @t + '] where [' + @c + '] like ''%lond%''
    begin
        if not exists(select 1 from # where name='''+@t+''')
            insert into # select '''+@t+''','''+@c+'''
        else
            update # set cols=cols+'','+@c+''' where name='''+@t+'''
    end   
    ')
    fetch  next  from  table_cursor  into  @t,@c 
end
close  table_cursor  deallocate  table_cursor;
select * from #

posted @ 2009-11-05 16:51  彷徨......  阅读(712)  评论(0编辑  收藏  举报