资讯   |   开发   |   选机中心   |   产品大全 | IBM | 惠普 | 联想 | 戴尔 | 苹果 | 神舟
更多: | 华硕 | 明基 | 方正 | 紫光 | TCL | 夏新 | 联宝 | 宏碁 | 七喜 | 长城 | 清华同方 | 海尔 | 三星 | 东芝 | 索尼 | 富士通 | LG | 技术 | ddnoon
当前位置:笔记本 > 软件开发 >
Advertisement
文章正文

如何写一个多个条件查询的 存储过程?

类型:转载   责任编辑:asp.net   日期:2007/05/23


热门软件下载:


   

rop   procedure   proandproxy_search  
   
  create   procedure   proandproxy_search  
  @year         varchar(20)=NULL,           --工程年度输入参数  
  @proname   varchar(200)=NULL,--工程的名称输入参数  
  @proxycom     varchar(40)=NULL,--委托单位输入参数  
  @proprofession   varchar(20)=NULL,   --工程专业输入参数  
  @proid       varchar(50)   output,--工程编号  
  @proprofession_out   varchar(20)   output,   --工程专业输出参数  
  @year_out         varchar(20)   output,--工程年度输出参数  
  @proname_out   varchar(200)   output,--工程的名称输出参数  
  @proinvest   numeric(12,2)output,   --工程总投资  
  @projlcost   numeric(12,2)   output,--工程监理费  
  @designcom     varchar(40)   output,   --设计单位  
  @constructcom     varchar(40)   output,   --施工单位  
  @proxycom_out     varchar(40)   output,--委托单位  
  @starttime   varchar(20)   output,   --开始工期  
  @stoptime   varchar(20)   output,--结束工期  
  @proxysort   varchar(40)   output   ,--委托书类别  
  @transtime   varchar(20)   output,   --移交日期  
  @signtime   varchar(20)   output   --签定日期  
   
  as  
  if  
  @year!=null   and   @proname=NULL   AND   @proxycom=NULL   AND   @proprofession=NULL  
  begin  
  select   @proid   =ProjectTable.工程编号,@proprofession_out=工程专业,@proname_out=工程项目名称,@year_out=工程年度,  
  @proinvest=工程总投资,@projlcost=工程监理费,@designcom=设计单位名称,@proxycom_out=委托单位名称,  
  @constructcom=施工单位名称,@starttime=计划开始工期,@stoptime=计划结束工期,@proxysort=委托书类别名称,  
  @transtime=资料移交日期,@signtime=资料签定日期  
  from   ProjectTable,DesignCompanyTable,ProxyCompanyTable,ProxySortTable,ProxyTable  
  where   ProjectTable.工程年度=   @year   and   DesignCompanyTable.设计单位编号=ProjectTable.设计单位编号   and  
  ProxyCompanyTable.委托单位编号=ProjectTable.委托单位编号   and   ProjectTable.工程编号=ProxyTable.工程编号  
  and   ProxyTable.委托书类别编号=ProxySortTable.委托书类别编号  
  end  
  else   if  
  @year=null   and   @proname!=NULL   AND   @proxycom=NULL   AND   @proprofession=NULL  
  begin  
  select   @proid   =ProjectTable.工程编号,@proprofession_out=工程专业,@proname_out=工程项目名称,@year_out=工程年度,  
  @proinvest=工程总投资,@projlcost=工程监理费,@designcom=设计单位名称,@proxycom_out=委托单位名称,  
  @constructcom=施工单位名称,@starttime=计划开始工期,@stoptime=计划结束工期,@proxysort=委托书类别名称,  
  @transtime=资料移交日期,@signtime=资料签定日期  
  from   ProjectTable,DesignCompanyTable,ProxyCompanyTable,ProxySortTable,ProxyTable  
  where   ProjectTable.工程项目名称=   @proname   and   DesignCompanyTable.设计单位编号=ProjectTable.设计单位编号   and  
  ProxyCompanyTable.委托单位编号=ProjectTable.委托单位编号   and   ProjectTable.工程编号=ProxyTable.工程编号  
  and   ProxyTable.委托书类别编号=ProxySortTable.委托书类别编号  
  end  
  else   if  
  @year=null   and   @proname=NULL   AND   @proxycom!=NULL   AND   @proprofession=NULL  
  begin  
  declare  
  @proxycomID     int  
   
  select   @proxycomID=委托单位编号   from   ProxyCompanyTable   where   委托单位名称=@proxycom  
   
  select   @proid   =ProjectTable.工程编号,@proprofession_out=工程专业,@proname_out=工程项目名称,@year_out=工程年度,  
  @proinvest=工程总投资,@projlcost=工程监理费,@designcom=设计单位名称,@proxycom_out=ProxyCompanyTable.委托单位名称,  
  @constructcom=施工单位名称,@starttime=计划开始工期,@stoptime=计划结束工期,@proxysort=委托书类别名称,  
  @transtime=资料移交日期,@signtime=资料签定日期  
  from   ProjectTable,DesignCompanyTable,ProxyCompanyTable,ProxySortTable,ProxyTable  
  where   ProjectTable.委托单位编号=   @proxycomID   and   DesignCompanyTable.设计单位编号=ProjectTable.设计单位编号   and  
  ProxyCompanyTable.委托单位编号=ProjectTable.委托单位编号   and   ProjectTable.工程编号=ProxyTable.工程编号  
  and   ProxyTable.委托书类别编号=ProxySortTable.委托书类别编号  
  end  
  else   if  
  @year=null   and   @proname=NULL   AND   @proxycom=NULL   AND   @proprofession!=NULL  
  begin  
  select   @proid   =ProjectTable.工程编号,@proprofession_out=工程专业,@proname_out=工程项目名称,@year_out=工程年度,  
  @proinvest=工程总投资,@projlcost=工程监理费,@designcom=设计单位名称,@proxycom_out=委托单位名称,  
  @constructcom=施工单位名称,@starttime=计划开始工期,@stoptime=计划结束工期,@proxysort=委托书类别名称,  
  @transtime=资料移交日期,@signtime=资料签定日期  
  from   ProjectTable,DesignCompanyTable,ProxyCompanyTable,ProxySortTable,ProxyTable  
  where   ProjectTable.工程专业=   @proprofession   and   DesignCompanyTable.设计单位编号=ProjectTable.设计单位编号   and  
  ProxyCompanyTable.委托单位编号=ProjectTable.委托单位编号   and   ProjectTable.工程编号=ProxyTable.工程编号  
  and   ProxyTable.委托书类别编号=ProxySortTable.委托书类别编号  
  end  
  else   if  
  @year!=null   and   @proname=NULL   AND   @proxycom!=NULL   AND   @proprofession=NULL  
  begin  
  declare  
  @search_proxycomID     int  
   
  select   @search_proxycomID=委托单位编号   from   ProxyCompanyTable   where   委托单位名称=@proxycom  
   
  select   @proid   =ProjectTable.工程编号,@proprofession_out=工程专业,@proname_out=工程项目名称,@year_out=工程年度,  
  @proinvest=工程总投资,@projlcost=工程监理费,@designcom=设计单位名称,@proxycom_out=委托单位名称,  
  @constructcom=施工单位名称,@starttime=计划开始工期,@stoptime=计划结束工期,@proxysort=委托书类别名称,  
  @transtime=资料移交日期,@signtime=资料签定日期  
  from   ProjectTable,DesignCompanyTable,ProxyCompanyTable,ProxySortTable,ProxyTable  
  where   ProjectTable.工程年度=@year   and   ProjectTable.工程项目名称=   @proname   and   DesignCompanyTable.设计单位编号=ProjectTable.设计单位编号   and  
  ProxyCompanyTable.委托单位编号=ProjectTable.委托单位编号   and   ProjectTable.工程编号=ProxyTable.工程编号  
  and   ProxyTable.委托书类别编号=ProxySortTable.委托书类别编号  
  end  
  else   if  
  @year!=null   and   @proname=NULL   AND   @proxycom=NULL   AND   @proprofession!=NULL  
  begin  
  select   @proid   =ProjectTable.工程编号,@proprofession_out=工程专业,@proname_out=工程项目名称,@year_out=工程年度,  
  @proinvest=工程总投资,@projlcost=工程监理费,@designcom=设计单位名称,@proxycom_out=委托单位名称,  
  @constructcom=施工单位名称,@starttime=计划开始工期,@stoptime=计划结束工期,@proxysort=委托书类别名称,  
  @transtime=资料移交日期,@signtime=资料签定日期  
  from   ProjectTable,DesignCompanyTable,ProxyCompanyTable,ProxySortTable,ProxyTable  
  where   ProjectTable.工程年度=   @year   and   ProjectTable.工程专业=   @proprofession   and   DesignCompanyTable.设计单位编号=ProjectTable.设计单位编号   and  
  ProxyCompanyTable.委托单位编号=ProjectTable.委托单位编号   and   ProjectTable.工程编号=ProxyTable.工程编号  
  and   ProxyTable.委托书类别编号=ProxySortTable.委托书类别编号  
  end  
  else    
  begin  
  insert   into   ProLogTable(说明)   values   (请您按着帮助操作进行查询,否则查询将会出错)  
  end  
  -----------------------------------------  
  有四个查询条件:  
  @year         varchar(20)=NULL,           --工程年度输入参数  
  @proname   varchar(200)=NULL,--工程的名称输入参数  
  @proxycom     varchar(40)=NULL,--委托单位输入参数  
  @proprofession   varchar(20)=NULL,   --工程专业输入参数  
  别的都是输出参数:  
  @proid       varchar(50)   output,--工程编号  
  @proprofession_out   varchar(20)   output,   --工程专业输出参数  
  @year_out         varchar(20)   output,--工程年度输出参数  
  @proname_out   varchar(200)   output,--工程的名称输出参数  
  @proinvest   numeric(12,2)output,   --工程总投资  
  @projlcost   numeric(12,2)   output,--工程监理费  
  @designcom     varchar(40)   output,   --设计单位  
  @constructcom     varchar(40)   output,   --施工单位  
  @proxycom_out     varchar(40)   output,--委托单位  
  @starttime   varchar(20)   output,   --开始工期  
  @stoptime   varchar(20)   output,--结束工期  
  @proxysort   varchar(40)   output   ,--委托书类别  
  @transtime   varchar(20)   output,   --移交日期  
  @signtime   varchar(20)   output   --签定日期  
  -----------------------------------------------------------  
  这样可以吗?谢谢!  
 

网友回答:

发表者:wzh1215

这么多输出参数,用一个结果集代替不是更好吗!

发表者:tracy_qd

declare   @sql="select   *   from   table   where   1=1"  
  if(@year!=)  
  begin  
  select   @sql=@sql+"   and   myear="+@year  
  end  
  ......  
  exec   @sql

发表者:feifei2001

存储过程的写法有问题啊,这么多的返回,当然要用结果集了,类似下面:  
   
  create   procedure   proandproxy_search  
  ...     --各个参数  
  as    
   
  ...   --   你的处理  
   
  ---最后返回结果集  
  Select   (你需要返回的东西...)   from     (一个临时表,或者其他)  
   
  GO  
   
 

发表者:lshuy2001

其实你不应该写这么多,你只要写上3个就行啦,这样大家看的也清楚,余下的你就比照着写就得了  
  你写的太多啦,我看了就不知道你到底想要什么  
  提问题,言简意赅


 

 
热门推荐笔记本: 夏新笔记本
相关文章:
笔记本相关:
IT技术文章:
webmaster:popbb@126.com   最佳浏览:1024X768 MSIE
©2007 popbb.net All Rights Reserved