教您使用SQL游标解决查询全表问题


  本文标签:SQL游标

  借助SQL游标,可以轻松解决SQL查询全表的问题  。下面就为您介绍该SQL游标的写法,供您参考,希望对您学习SQL游标有所帮助  。

  1. Create procedure Full_Search(@string varchar(100))  
  2. as  
  3. begin  
  4. declare @tbname varchar(100)   
  5. declare tbroy cursor  for select name from sysobjects    
  6. where xtype=u   --第一个游标遍历所有的表  
  7.  
  8. open tbroy  
  9. fetch next from tbroy into @tbname  
  10. while @@fetch_status=0 
  11. begin  
  12.     
  13.  declare @colname varchar(100)  
  14.  declare colroy cursor for select name from syscolumns  
  15.  where id=object_id(@tbname) and xtype in (  
  16.  select xtype from systypes  
  17.  where name in (varchar,nvarchar,char,nchar) --数据类型为字符型的字段  
  18.  ) --第二个游标是第一个游标的嵌套游标,遍历某个表的所有字段  
  19.  
  20.  open colroy  
  21.  fetch next from colroy into @colname  
  22.  while @@fetch_status=0 
  23.  begin  
  24.    
  25.  declare @sql nvarchar(4000),@j int  
  26.  select @sql=select @i=count(1) from  +quotename(@tbname) +  where + quotename(@colname)+ like +%+@string+%  
  27.  exec sp_executesql @sql,N@i int output,@i=@j output   --输出满足条件表的记录数  
  28.  if @j>0  
  29.  begin  
  30.  declare @v varchar(8000)  
  31.  set @v=select  distinct +quotename(@colname)+ from  +quotename(@tbname) +  where + quotename(@colname)+ like +%+@string+%  
  32.  exec(@v)  
  33.  end  
  34.  fetch next from colroy into @colname  
  35.  end         
  36.    
  37.  close colroy  
  38.  deallocate colroy  
  39.  
  40. fetch next from tbroy into @tbname  
  41. end  
  42. close tbroy  
  43. deallocate tbroy  
  44. end  
  45.  
  46. exec Full_Search  市场  
  47.  
  48. drop proc Full_Search  
  49.