资源描述:
《第10章 存储过程new》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第10章存储过程及触发器10.1存储过程10.1.1存储过程的定义与特点1.存储过程的定义在sqlserver中,可以定义子程序存放在数据库中,这样的子程序称为存储过程,存储过程是数据库对象之一。2.存储过程的特点(1)允许模块化的程序设计(2)更快的执行速度(3)有效降低网络流量(4)确保数据库的安全10.1.2存储过程的类型1.系统存储过程:由系统提供的存储过程,可以作为命令执行各种操作,系统存储过程定义在系统数据库master中,前缀为sp_。2.本地存储过程:指在用户数据库中创建的存储过程,其
2、名称不能用sp_开头3.临时存储过程4.远程存储过程5.扩展存储过程:在sqlserver环境之外执行的动态链接库称为扩展存储过程,其前缀为sp_,xp_10.2用户存储过程的创建与执行用户存储过程只能定义在当前数据库中,可以使用sql命令或sqlserver的企业管理器创建。10.2.1通过sql命令创建和执行存储过程创建存储过程的语法:createproc[edure]procedure_name[{@parameterdata_type}[varying][=default][output]][
3、,…n]Asselectsql_statement通过EXEC命令可以执行一个已定义的存储过程语法格式:[EXEC[UTE]]{[@return_status=]{procedure_name}[[@parameter=]{value
4、@variable[output]
5、[default][,…n][withrecompile]}在CREATEPROCEDURE语句中,可以包括任意数量和类型的T-SQL语句,但是创建存储过程的内容有如下一些限制:(1)不能包含下列语句:Createview、creat
6、etrigger、createdefault、createprocedure、createrule(2)不能在同一存储过程中创建、删除、重建同一对象名。(3)不能引用尚未存在的对象(4)虽然可以引用临时库,但若临时库被清零,则会导致系统出错,因此在存储过程中要谨慎使用临时表。1定义不带参数的存储过程(教材8.2.1)1)定义例1:从XSCJ数据库中,返回学生学号、姓名、课程名、成绩。usexscjifexists(selectnamefromsysobjectswherename='student_g
7、rade'andtype='p')dropprocedurestudent_gradegocreateprocedurestudent_gradeasselectxs.xh,xs.xm,kc.kch,xs_kc.chjfromxs,xs_kc,kcwherexs.xh=xs_kc.xhandxs_kc.kch=kc.kchGo2)调用存储过程EXECstudent_gradeGO教材示例8.1UsestudentGoCreateprocedureteacher_proc1AsSelect*fromte
8、acher_infowheregender=‘男’Go执行teacher_proc1UsestudentGoExecuteteacher_proc1go2创建和执行带参数的存储过程(1)创建例2从xscj数据库的三个表中查询某人指定课程成绩。usexscjifexists(selectnamefromsysobjectswherename='student_info'andtype='p')dropprocedurestudent_infogocreateprocedurestudent_info@n
9、amechar(8),@cnamechar(16)asselectxs.xh,xm,kcm,chjfromxs,kc,xs_kcwherexs.xh=xs_kc.xhandkc.kch=xs_kc.kchandxs.xm=@nameandkc.kcm=@cnamego或:usexscjifexists(selectnamefromsysobjectswherename='student_info1'andtype='p')dropprocedurestudent_info1gocreateproced
10、urestudent_info1@namechar(8),@cnamechar(16)asselectxs.xh,xm,kcm,chjfromxsinnerjoinxs_kconxs.xh=xs_kc.xhinnerjoinkconxs_kc.kch=kc.kchwherexs.xm=@nameandkc.kcm=@cnamego再或:usexscjifexists(selectnamefromsysobjectswherename=’student_i