CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

======超级查询(存储过程)==================

楼主pyz8000(黑洞)2005-01-18 15:00:59 在 MS-SQL Server / 基础类 提问

用途:想查找sql   server数据库中某个内容,但不知道在哪个表的哪个字段,数据表多,字段更多,一个表,一个字段的查那要  
  查到什么时候?改过别人写的程序的人一定有过经历,例如说我,经常改动网论坛,看的都晕,好多都放到数据库里,我又不知  
  道是在哪个表哪个字段,改起来真NND累,所以小弟写了这个小存储过程忘大家批评指教。  
  使用方法:  
  ***新建存储过程,先拷贝代码,粘贴,在查询分析器中运行***  
  使用方法:  
  find   "表名","要查找的内容"  
  例1:  
  find   "用户名","笨蛋"           /*结果返回表名、字段、记录数、命令(可以运行)*/  
  例二:  
  find   "*","笨蛋"  
  ----sql   server   2000测试通过----------  
  CREATE   PROCEDURE   find    
  @table   varchar(50),  
  @findstr   varchar(500)  
    AS  
  declare   @fields   varchar(2000)/*字段列表*/  
  declare   @qswz   int   /*字段起始位置,即第一个字段*/  
  declare   @zzwz   int   /*终止位置*/  
  declare   @hs   int   /*返回行数*/  
  declare   @field     varchar(200)/*查询字段*/  
  declare   @return   varchar(8000)   /*返回*/  
  set   @fields=''  
  if(@table='*')  
  begin  
  create   table   #ls1([table]   varchar(100),sqlcmd   varchar(300))/*表名,字段,影响行数,查询命令*/  
   
  select   @fields=@fields+','+[name]   from   sysobjects   where   xtype='U'   and   name<>'dtproperties'  
  set   @fields=right(@fields,len(@fields)-1)  
  set   @fields=@fields+','  
  set   @qswz=0  
  set   @zzwz=0    
  set   @zzwz=charindex(',',@fields)  
  while   (@zzwz>0)  
  begin  
  set   @field=substring(@fields,@qswz,@zzwz-@qswz)  
  insert   into   #ls1([table],sqlcmd)   values(@field,'find   '''+@field+''','''+@findstr+'''')  
  set   @qswz=@zzwz+1  
  set   @zzwz=charindex(',',@fields,@qswz)  
  end  
   
  select   *   from   #ls1  
   
  declare   yb   cursor   for   select   [table]   from   #ls1  
  open   yb  
  fetch   next   from   yb   into   @field  
  while   (@@fetch_status=0)  
  begin  
  print   'find   '''+@field+''','''+@findstr+''''  
  print   'go'  
  fetch   next   from   yb   into   @field  
  end  
  close   yb  
  deallocate   yb  
  drop   table   #ls1  
  end  
  else  
  begin  
  select   @fields=@fields+','+[name]   from   syscolumns   where   id=object_id(@table)   and   (xtype=175   or   xtype=62    
   
  or   xtype=239   or   xtype=99   or   xtype=56   or   xtype=231   or   xtype=35   or   xtype=167)   order   by   colid  
  set   @fields=right(@fields,len(@fields)-1)  
  set   @fields=@fields+','  
  set   @qswz=0  
  set   @zzwz=0    
  set   @zzwz=charindex(',',@fields)  
   
  create   table   #ls([table]   varchar(100),field   varchar(100),hs   int,sqlcmd   varchar(300))/*表名,字段,影响行数,  
   
  查询命令*/  
   
  while   (@zzwz>0)  
  begin  
  set   @field=substring(@fields,@qswz,@zzwz-@qswz)  
  set   @hs=0  
  exec('declare   yb   cursor   for   select   count(*)   from   '+@table+'   where   '+@field+'   like    
   
  ''%'+@findstr+'%''')  
  open   yb  
  fetch   next   from   yb   into   @hs  
  close   yb  
  deallocate   yb  
   
  if   (@hs>0)  
  begin  
  declare   @ls   varchar(8000)  
  set   @ls='declare   @test   varchar(8000);select   @test=convert(varchar(8000),'+@field+')   from    
   
  '+@table+'   where   '+@field+'   like   ''%'+@findstr+'%'';print   @test;select   '''+@table+'''   as   [table],'+@field+',*    
   
  from   '+@table+'   where   '+@field+'   like   ''%'+@findstr+'%'''  
  insert   into   #ls([table],field,hs,sqlcmd)   values(@table,@field,@hs,@ls)  
  end    
  set   @qswz=@zzwz+1  
  set   @zzwz=charindex(',',@fields,@qswz)  
  end  
  declare   @ls_count   int  
  select   @ls_count=count(*)   from   #ls  
  if(@ls_count>0)  
  select   *   from   #ls  
  drop   table   #ls  
  end  
  GO  
  问题点数:1、回复次数:11Top

1 楼chinaandys(降龙十八炒&&蛋炒饭)回复于 2005-01-18 15:08:48 得分 1

upTop

2 楼pyz8000(黑洞)回复于 2005-01-18 15:46:46 得分 0

ding   a   ding   a   ding   a   ding  
  我个人觉得不错呀,怎么没人光顾啊Top

3 楼passionke(每一步都改变未来,却只能有一种结局!)回复于 2005-01-18 15:50:07 得分 0

没感觉多实用哦Top

4 楼happyflystone(无枪的狙击手)回复于 2005-01-18 15:54:49 得分 0

upTop

5 楼hglhyy(為人民币服务!)回复于 2005-01-18 16:47:01 得分 0

你是要查那个表中有什么字段,或是查数据库中有什么表是吗?  
   
  检查一个表是否存在:  
  if   not   exists(select   *   from   sysobjects   where   name='abcd')  
  create   table   abcd   (  
      aaa   char(11)   not   null,  
      bbb   char(10)  
  );  
   
  检查一个表中某个自段是否存在:  
  if   not   exists(select   b.*,a.*   from   sysobjects   a,syscolumns   b   where   a.name='aaa'   and   a.id=b.id   and   b.name='bbb')  
  alter   table   aaa   add   bbb   char(2);  
     
  检查一条记录是否存在:  
  if   not   exists(select   *   from   table_list   where   tbname='bbb')  
  insert   into   table_list   (tbname,chnname,tbtype)   values   ('tblist','DEMO表','系统表');Top

6 楼mrpanweizhao(水禾田)回复于 2005-01-18 16:57:03 得分 0

upTop

7 楼pyz8000(黑洞)回复于 2005-01-18 17:16:32 得分 0

这个程序是:  
  当sql   server的一个数据库中有很多个表,比如50个,这个表又不是你自己设计的,  
  这时,你想查找一个内容,比如‘企业代码’之类的,  
  请问大家是怎么查找的???????  
  我的查找方法是用上面的存储过程:  
   
  find   表名,'企业代码'  
   
  大家是怎么查找呢?是用企业管理器一个一看还是用查询下面这种语句:select   *   from   表名   where   field1   like   '%企业代码%'   or   field2   like   '%企业代码%'   or   ...fieldN   like   '%企业代码%'  
   
  我只要用   find   表名,'企业代码' 便可以了。  
  而且   表名可以用*代替,大家可以试试^_^Top

8 楼aliren(阿里人)回复于 2005-01-18 17:29:47 得分 0

怎么用都不知道。。。。。。我建了存储过程,然后执行  
  find   表名,'jimmy'   or    
  find   '表名','jimmy'   or  
  find   "表名","jimmy"     都如下错误  
  服务器:   消息   536,级别   16,状态   1,过程   find,行   50  
  向   substring   函数传递了无效的   length   参数。  
  服务器:   消息   156,级别   15,状态   1,行   1  
  在关键字   'like'   附近有语法错误。  
  服务器:   消息   16916,级别   16,状态   1,过程   find,行   67  
  名为   'yb'   的游标不存在。  
  服务器:   消息   16916,级别   16,状态   1,过程   find,行   68  
  名为   'yb'   的游标不存在。  
  服务器:   消息   16916,级别   16,状态   1,过程   find,行   69  
  名为   'yb'   的游标不存在。  
  服务器:   消息   16916,级别   16,状态   1,过程   find,行   70  
  名为   'yb'   的游标不存在。Top

9 楼aliren(阿里人)回复于 2005-01-18 17:32:49 得分 0

垃圾东西。。Top

10 楼pyz8000(黑洞)回复于 2005-01-19 11:04:42 得分 0

晕Top

11 楼zlp321002(Life Is Good,Let's Shine)回复于 2005-01-19 11:11:23 得分 0

--大家不要否认楼主的劳动成果好不好?  
  --楼主也是用心良苦  
  我来学习~Top

相关问题

  • 存储过程查询问题
  • 存储过程里的模糊查询~
  • 用存储过程分页查询还是好慢,在查询分析器执行存储过程要10秒
  • 请问怎么在一个存储过程里实现另外一个存储过程(超级难题~~~~~~~~~~~~~~~~~~~~~~~~~~~)
  • 在asp中用存储过程怎么实现数据集的查询任务?存储过程该如何写?
  • 非常简单的存储过程问题,如何写一个这样的简单查询的存储过程?
  • 邹大哥~~存储过程中,如何调用其他存储过程的查询结果啊?
  • 存储过程能不能实现被查询的表名的参数化???<<<存储过程表名参数化>>>
  • 一个超级简单的存储过程的问题!
  • ORACLE中存储过程怎样返回查询结果集?

关键词

  • 字段
  • 存储过程
  • 代码
  • 服务器
  • 查询
  • 企业
  • 消息
  • 数据库
  • 检查
  • zzwz

得分解答快速导航

  • 帖主:pyz8000
  • chinaandys

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo