一个主表,很多子表,很多子表下边还有子表,目前需要在界面上输入一个字符串,在主表及所有子表的所有字段中检索是否有匹配的字段,应该如何做?
把所有主子表的所有字符字段值放在主表的一个字段里用全文检索好不好?

解决方案 »

  1.   

    转自CSDN--ojuju10
    已知表和字段,用like去模糊查询一个字符串,这个比较简单,但是只已知一个字符串,去查询整个数据库内有那些表里面包含这个字符串,这个问题就不是那么简单啦!通过查询了大量的资料,最后用游标实现了这个需求: create proc Full_Search(@string varchar(50))
    as
    begindeclare @tbname varchar(50) 
    declare tbroy cursor  for select name from sysobjects  
    where xtype='u'   --第一个游标遍历所有的表open tbroy
    fetch next from tbroy into @tbname
    while @@fetch_status=0
    begin
      
     declare @colname varchar(50)
     declare colroy cursor for select name from syscolumns
     where id=object_id(@tbname) and xtype in (
     select xtype from systypes
     where name in ('varchar','nvarchar','char','nchar') --数据类型为字符型的字段
     ) --第二个游标是第一个游标的嵌套游标,遍历某个表的所有字段 open colroy
     fetch next from colroy into @colname
     while @@fetch_status=0
     begin
     
     declare @sql nvarchar(1000),@j int
     select @sql='select @i=count(1) from ' +@tbname +'  where '+ @colname+' like '+'''%'+@string+'%'''
     exec sp_executesql @sql,N'@i int output',@i=@j output   --输出满足条件表的记录数
     if @j>0
     exec('select  distinct '+@colname+' from ' +@tbname +'  where '+ @colname+' like '+'''%'+@string+'%''') fetch next from colroy into @colname
     end       
     
     close colroy
     deallocate colroyfetch next from tbroy into @tbname
    end
    close tbroy
    deallocate tbroy
    endexec Full_Search  '市场'drop proc Full_Search