sql数据库中的存储过程的参数问题_第1页
sql数据库中的存储过程的参数问题_第2页
sql数据库中的存储过程的参数问题_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1、sql数据库中的存储过程的参数问题怎么将sql数据库中的存储过程中的参数既作为输出变量又作为输出变量 sql view pla in copy -drop proc proc_test-gocreate proc c_testin int,out int out,in _out int outputasselect out = in + in_out, -1 + 2 = 3in_out = out + 1 -3 + 1 = 4godeclare in_p intdeclare out_p intdeclare in_o ut_p intset in_p = 1;set in_

2、o ut_p = 2exec c_test in_p,out_p out,in_o ut_p output select in_p,-输入参数 out_p,-输出参数 in_out_p -输入,输出参数 /*优列名)(无列名)(无列名)1 3 4*/2、在存储过程中的参数问题。 下面是问题:,age int,)sql view pla in copy create table #tabletest(id int ide ntity , n ame varchar(20) goin sert into #tabletestselect 小明,23 union allselect 小

3、红,28 un io n allselect 小军,27goselect *from #tabletestgocreate proc proctestname varchar(20),age int,ids varchar(30)asbeginselect *from #tabletest where 1=1end-当我传入name参数等于 小明,23岁,还有id在(1,3)的时候-我怎么可以弄成可选的参数-比如,name不为空时候select *from #tabletest where 1=1 and name like 小明-如果name参数为空的时候,ids参数不为空的时候select

4、 *from #tabletest where 1=1 and id in( 1,3)-请问一下,就有参数不为空的时候存储过程中的sql追加条件,为空的时候就不追加,这样带可选参数的存储过程怎么写,以及怎么调用,请帮小弟写一个实例这种问题,本质上就是根据传入的参数不同,进行不同的查询,也就是where后面的查询条件是动态的。一般有2中处理方式,一种就是写动态语句,但动态语句由于是动态拼接字符串,所以比较难维护,而且如果存储过程需要执行多次,那么每次都需要重新编译,但每次生成的执行计划,应该是比较优化的。但如果拼接字符串部分,只是少量的话,还是可以用动态语句的,下面我的解法就是用动态语句来实现的

5、,结构清晰,易于维护。另一种,就是通过在 where语句后面写case when来进行判断,这种方法的好处是不用 动态拼接语句,但不易于理解,也不易于修改,因为别人不一定能理解你这么写的意思。另 一个问题就是性能的问题,因为在原来的公司就用过这种方法,一段时间后,查询非常慢, 本来几秒就能出结果,后来几分钟都出不了结果。说实在的,这种方法要求较高的技巧性, 也容易出错,不建议使用。下面是我的解法,用了动态语句来实现,但考虑了维护、测试方面的要求:sql view pla in copy -drop table #tabletestcreate table #tabletest(id int i

6、dentity , name varchar(20) , age int,)goin sert into #tabletestselect 小明,23 union allselect 小红,28 un io n allselect 小军,27goselect *from #tabletestgocreate proc proctestn ame varchar(20)=nu ll,age int = n ull,ids varchar(30) = nullasdeclare sql n varchar(max);set sql = ”;set sql = select * from #tabl

7、etest where 1 = 1;set sql = sql +case whe n n ame is not n ullthe n and n ame like + quote name( n ame +%,)whe n age is not n ullthen and age = + cast(age as varchar)whe n ids is not nullthen and id in ( + ids +)else end-打印出语句select sql as 语句-执行语句-exec(sql)goexec proctest/*语句select * from #tabletest where 1 = 1*/exec proctest 小明,23/*语句select * from #tabletest where 1 = 1 and name like 小明 %*/exec proctest ids = 2,3/*语句select * from #tabletest where 1 = 1 and id in (2,3)*/备注:如遇到需多个and参数连接查询,sql语句可写如下set sql= sql +case whe n seller nick < ;& gt;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论