在数据库查询任意字符所在表和字段


/*
版本号: 20090509
制作人: 叮叮猫
QQ    : 115101062 ゞ哈廸厮こ吻
你可以再任意数据库里面使用 但是需要你在 '就是我要找的东西'进行赋值
同时,需要检查那个数据库  就在那里数据库里面执行  有问题 可以联系我
*/
create table #myTable  
(  
    tablename varchar(50),  
    tableNumname varchar(100)  
)  
go
declare @delStr nvarchar(500)  
    set @delStr='就是我要找的东西' /*************这里是关键词*******************/ 
/****************************************/ 
 
/**********以下为操作实体************/ 
set nocount on  
    declare @tableName nvarchar(100),@columnName nvarchar(100),@tbID  
    int,@iRow int,@iResult int 
    declare @sql nvarchar(500)  
 
set @iResult=0  
declare cur cursor for 
select name,id from sysobjects where xtype='U'--查询出所有用户创建的表  
--打开游标  
open cur  
fetch next from cur into @tableName,@tbID --同时遍历这些表  
 
while @@fetch_status=0  
begin  
 declare cur1 cursor for 
       --xtype in (35,231,167,239,175) 为char,varchar,nchar,nvarchar类型  
       select name from syscolumns where xtype in (35,231,167,239,175) and id=@tbID --查询表内数据为这几个类型的列名  
 open cur1 --打开游标  
 fetch next from cur1 into @columnName --遍历查询结果  
 while @@fetch_status=0  
 begin  
    --set @sql=' select '+@tableName+' from '+@tableName+' where '+@columnName+' like ''%'''+@delStr+'''%''  
  
    /* set @sql='update [' + @tableName + '] set ['+ @columnName +']= 
replace(['+@columnName+'],'''+@delStr+''','''') where 
['+@columnName+'] like ''%'+@delStr+'%'''*/ 

    --set @sql='select '''+@tableName+''' from ['+@tableName+'] where ['+@columnName+'] like ''%'+@delStr+'%''' 
                                
    set @sql='insert into #myTable  select '''+@tableName+''','''+@columnName+''' from ['+@tableName+'] where ['+@columnName+'] like ''%'+@delStr+'%'' or  cast(['+@columnName+'] as varchar(1000)) like ''%'+@delStr+'%''' 
    --select @sql  
    exec sp_executesql @sql --查询出里面含有这个数据的表明  
    set @iRow=@@rowcount--  
    set @iResult=@iResult+@iRow  
    if @iRow>0  
         begin--输出相关的数据  
        print 'Table: '+@tableName+', Column:'+@columnName+' has   
      '+convert(varchar(10),@iRow)+' record(s);'  
         end  
     fetch next from cur1 into @columnName--把下一个@columnName 放到游标中  
 
 
 end  
 close cur1--关闭游标  
 deallocate cur1--关闭游标  
 
 fetch next from cur into @tableName,@tbID--把下一个@tableName,@tbID放到游标中  
end    
--print 'The database has '+convert(varchar(10),@iResult)+' record(s) .'  
close cur  
deallocate cur  
set nocount off  
select * from #myTable   group by tablename,tableNumname
order by tablename
drop table #myTable 

原文地址:https://www.cnblogs.com/dingdingmao/p/3146561.html