贴(邹老大的):
--搜索某个字符串在那个表的那个字段中declare @str varchar(100)
set @str='White'  --要搜索的字符串declare @s varchar(8000)
declare tb cursor local for
select s='if exists(select 1 from ['+b.name+'] where ['+a.name+'] like ''%'+@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.xusertype in(175,239,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/*--测试结果所在的表及字段: [authors].[au_lname]--*/

解决方案 »

  1.   


    --小改一下就可以了
    --搜索某个字符串在那个表的那个字段中
    use yourdatabase  --yourdatabase填你的数据库名
    go
    declare @str varchar(100)
    set @str='上海部门人员'  --要搜索的字符串declare @s varchar(8000)
    declare tb cursor local for
    select s='if exists(select 1 from ['+b.name+'] where ['+a.name+'] like ''%'+@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.xusertype in(175,239,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
      

  2.   

    我建了个存储过程
    CREATE PROCEDURE serchfield ASdeclare  @str  varchar(100)  
    set  @str='2004-3-21 10:03:57 (云河许云)'    --要搜索的字符串  
     
    declare  @s  varchar(8000)  
    declare  tb  cursor  local  for  
    select  s='if  exists(select  1  from  ['+b.name+']  where  ['+a.name+']  like  ''%'+@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.xusertype  in(175,239,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
      

  3.   

    你把set  @str='2004-3-21 10:03:57 (云河许云)'    --要搜索的字符串  改成
    set  @str='云河许云'    --要搜索的字符串  
    看看
    先不忙做成存储过程
      

  4.   

    use northwind
    go
    IF EXISTS (SELECT name 
       FROM   sysobjects 
       WHERE  name = N'serchfield' 
       AND    type = 'P')
        DROP PROCEDURE serchfield
    GO
    CREATE PROCEDURE serchfield ASdeclare  @str  varchar(100)  
    set  @str='Westboro'    --要搜索的字符串  
     
    declare  @s  varchar(8000)  
    declare  tb  cursor  local  for  
    select  s='if  exists(select  1  from  ['+b.name+']  where  ['+a.name+']  like  ''%'+@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.xusertype  in(175,239,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
    exec serchfield
    /*
    结果为:
    所在的表及字段:  [Territories].[TerritoryDescription]
    */
      

  5.   

    --看看是否字段类型的问题.--搜索某个字符串在那个表的那个字段中declare @str Nvarchar(100)
    set @str=N'云河许云'  --要搜索的字符串declare @s Nvarchar(4000)
    declare tb cursor local for
    select s='if exists(select 1 from ['+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.xusertype in(175,239,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/*--测试结果所在的表及字段: [authors].[au_lname]--*/
      

  6.   

    可能有些字段是ntext类型的,它可以搜出直接是“云河许云”,但'2004-3-21 10:03:57 (云河许云)'就搜不出来
      

  7.   

    --测试
    create table tb(a ntext)
    insert tb select '可能有些字段是ntext类型的,它可以搜出直接是“云河许云”,但''2004-3-21 10:03:57 (云河许云)''就搜不出来'
    go--搜索某个字符串在那个表的那个字段中declare @str Nvarchar(100)
    set @str=N'2004-3-21 10:03:57 (云河许云)'  --要搜索的字符串declare @s Nvarchar(4000)
    declare tb cursor local for
    select s='if exists(select 1 from ['+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--删除测试
    drop table tb/*--测试结果所在的表及字段: [tb].[a]
    --*/
      

  8.   

    这个不是复杂信息的问题,是字段类型的问题and a.xtype in(175,239,99,35,231,167)  --这里的条件限制了搜索的字段的数据类型
                                           --原来是不允许text/ntext的,加上就行了