在整个数据库搜索某个字符串在哪个表的哪个字段中

if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_search]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)  
  drop   procedure   [dbo].[p_search]  
  GO  
   
  /*--在整个数据库搜索某个字符串在哪个表的哪个字段中   
    
    
  /*--调用示例  
  use   pubs  
  exec   p_search   N'l'  
  --*/  
  create   proc   p_search  
  @str   Nvarchar(1000)   --要搜索的字符串  
  as  
  if   @str   is   null   return  
   
  declare   @s   Nvarchar(4000)  
  create   table   #t(表名   sysname,字段名   sysname)  
   
  declare   tb   cursor   local   for  
  select   s='if   exists(select   1   from   ['+replace(b.name,']',']]')+']   where   ['+a.name+']   like   N''%'+@str+'%'')  
  print   ''所在的表及字段:   ['+b.name+'].['+a.name+']'''  
  from   syscolumns   a   join   sysobjects   b   on   a.id=b.id  
  where   b.xtype='U'   and   a.status>=0  
  and   a.xtype   in(175,239,99,35,231,167)  
  open   tb  
  fetch   next   from   tb   into   @s  
  while   @@fetch_status=0  
  begin  
  exec(@s)  
  fetch   next   from   tb   into   @s  
  end  
  close   tb  
  deallocate   tb  
  go  

posted @ 2010-12-02 22:29  QQ天堂  阅读(674)  评论(0编辑  收藏  举报