SQLSERVER数据库原理及应用 _存储过程和触发器.ppt
《SQLSERVER数据库原理及应用 _存储过程和触发器.ppt》由会员分享,可在线阅读,更多相关《SQLSERVER数据库原理及应用 _存储过程和触发器.ppt(78页珍藏版)》请在三一办公上搜索。
1、第8章:存储过程和触发器,8.1存储过程的概念,存储过程是SQL语句和可选控制流语句的预编译集合,它以一个名字存储并作为一个单元处理。,8.2存储过程的分类,在SQL Server中存储过程分为两类,即系统提供的存储过程和用户自定义的存储过程。,第8章:存储过程和触发器,1)系统存储过程:由系统自动创建,主要存储在master数据库中,一般以sp_为前缀。系统存储过程完成的功能主要是从系统表中获取信息。可以在其它数据库中调用系统存储过程。当创建一个新的数据库时,一些系统存储过程会在新数据库中被自动创建。,第8章:存储过程和触发器,2)用户自定义存储过程:由用户创建并能完成某一特定功能的存储过程
2、。,第8章:存储过程和触发器,CREATE PROC P1ASSelect sname,cname,degreefrom student,score,courseWhere student.sno=score.sno and o=o,例如:,第8章:存储过程和触发器,3.使用存储过程的优点,1)实现模块化编程,2)使用存储过程可以加快程序的运行速度,一个存储过程可以被多个用户共享和重用。,存储过程在创建时即在服务器上进行编译,所以执行起来比单个sql语句快。,第8章:存储过程和触发器,3)使用存储过程可以减少网络流量,存储过程存储在数据库内,由应用程序通过一个调用语句就可以执行它,不需要将大量
3、T-SQL语句传送到服务器端。,4)使用存储过程可以提高数据库的安全性,用户可以调用存储过程,实现对表中数据的有限操作,但可以不赋予其直接修改数据表的权限,这样就提高了表中数据的安全性。,第8章:存储过程和触发器,4.存储过程创建,1)使用企业管理器创建存储过程,2)使用T-SQL创建存储过程,第8章:存储过程和触发器,3)创建存储过程应注意的事项:,存储过程是数据库对象,其名称必须遵守标识符规则。,不能将CREATE PROCEDURE语句与其他SQL语句组合到单个批处理中。,只能在当前数据库中创建存储过程。创建存储过程的权限默认属于数据库所有者,该所有者可将此权限授予其他用户。,第8章:存
4、储过程和触发器,5.执行存储过程,1)可以使用EXECUTE命令执行存储过程USE schoolEXEC p1,2)或直接写存储过程的名称(如果存储过程是批处理的第一条语句):USE schoolGO-批处理以GO结束P1GO,第8章:存储过程和触发器,6.修改存储过程,1)使用企业管理器修改存储过程(1)重命名(2)修改定义,第8章:存储过程和触发器,2)使用T-SQL语句修改存储过程(1)重命名 sp_rename 原名称,新名称,object(2)修改定义ALTER PROCEDURE authorAS,第8章:存储过程和触发器,7.删除存储过程,1)使用企业管理器修改存储过程2)使用T
5、-SQL语句修改存储过程DROP PROCPROCEDUTE sproc_name,第8章:存储过程和触发器,8.存储过程参数化(重点、难点),存储过程为我们提供了执行某种过程的能力,但是,如果它不能接受让其进行操作的某种数据,那么在大多数环境下来就没有用处。例如,建立一个删除表中数据的存储过程,要知道删除满足什么条件的记录。同样,有时候我们也想让存储过程输出一些信息,例如,我们建立一个更新表中数据的存储过程,一般情况需要知道到底更新了多少条记录,等等。要想实现上面的功能,就需要建立带有参数的存储过程。,第8章:存储过程和触发器,1)创建带有输入参数的存储过程,例题1:创建一个向表studen
6、t中输入数据的存储过程。,第8章:存储过程和触发器,Use schoolGOCREATE PROC spinsertsno char(5),sname char(8),ssex char(2),sbirthday datetime,class char(5)AS INSERT INTO student(sno,sname,ssex,sbirthday,class)VALUES(sno,sname,ssex,sbirthday,class),执行存储过程:exec spinsert 111,张三,男,1980-1-1,95031 上面例题创建的存储过程spinsert一共需要5个参数,并且因为没
7、有给这些参数提供默认值,所以为了成功运行该存储过程,必须提供这些参数值。如果执行如下语句:exec spinsert 112,李四,男,1985-1-2 其中少了一个参数,尽管在基本表中该字段允许为空,但是此proc也不能被成功执行。,第8章:存储过程和触发器,例题2:,2)创建带有输入参数的存储过程,同时给参数提供默认值。,第8章:存储过程和触发器,Use schoolGOCREATE PROC spinsertsno char(5),sname char(8),ssex char(2),sbirthday datetime,class char(5)=95031-(或者class char
8、(5)=null)AS INSERT INTO student(sno,sname,ssex,sbirthday,class)VALUES(sno,sname,ssex,sbirthday,class),exec spinsert 112,李四,男,1985-1-2,执行存储过程:,此时,该proc执行成功!,3)创建带有输出参数的存储过程,第8章:存储过程和触发器,Use schoolGOCREATE PROC averagest_no int,st_name char(8)output,st_avg float outputASSelect st_name=student.sname,st
9、_avg=avg(score.degree)From student,score where student.sno=score.snoGroup by student.sno,student.snameHaving student.sno=st_no,Declare st_name char(8)Declare st_avg floatExec average 108,st_name output,st_avg outputSelect 姓名=st_name,平均分=st_avg Go,执行存储过程:,第8章:存储过程和触发器,Declare st_name char(8)Declare s
10、t_avg floatExec average 108,st_name output,st_avg outputPrint st_name print st_avg Go,或者:,第8章:存储过程和触发器,Declare st_name char(8)Declare st_avg floatExec average 108,st_name output,st_avg outputPrint st_name+cast(st_avg as char(4)Go,或者:,第8章:存储过程和触发器,9.存储过程的返回值,例题1:1)创建存储过程 create proc spreturn as decla
11、re a1 char(30)set a1=下面是存储过程的返回值:print a1,第8章:存储过程和触发器,declare b int exec b=spreturn print b,可以看到运行结果是:下面是存储过程的返回值:0,存储过程在执行后都会返回一个整型值。如果执行成功,返回0;否则返回-1到-99之间的数值。,0是存储过程的返回值。,第8章:存储过程和触发器,2)运行存储过程,例如:执行前面创建的存储过程 spinsert,declare b intexec b=spinsert 112,李四,男,1985-1-2,95031print b,执行两次上面的语句,第二次就不能成功执
12、行了。所以返回值是个非0值。,第8章:存储过程和触发器,格式:return 注意:返回值必须是整数。,Return语句的最大特点是:一旦执行了return语句,那么系统就无条件的从过程中退出。也就是说,无论在过程的哪个位置执行了return语句,就再也不会执行该过程中的语句了。,例如在第六章讲到的例题:,第8章:存储过程和触发器,declare a1 intset a1=1print a1return set a1=2print a1return,我们知道过程运行结果是1,这就说明了没有执行第一个return后面的语句。如果把第一个return删除再运行过程,会得到1和2。证明这次过程中的语句
13、都被执行了。,第8章:存储过程和触发器,Return怎么用在存储过程中呢?,第8章:存储过程和触发器,修改例题1如下:,例题2:1)创建存储过程 create proc spreturn as declare a1 char(30)set a1=下面是存储过程的返回值:print a1 return 100-return,默认返回0,第8章:存储过程和触发器,2)运行存储过程 declare b int exec b=spreturn print b,通过例题可以看到,可以给return语句指定返回值。但例题1没有指定返回值,结果仍然有返回值0。这是因为系统本身有返回值,如果过程成功执行,返回
14、0。因此,例题1默认的返回了0。但是,我们也可以让过程返回我们希望得到的值,例如例题2。一般情况下,我们都给return指定返回值。,第8章:存储过程和触发器,说明:返回值(return实现)与输出参数不是一回事。但有的情况,两者可以完成相同的功能。,例如:创建一个proc,功能是:求1-N的和。要求:使用输出参数和返回值两种方式来实现。,第8章:存储过程和触发器,执行:declare a int exec p1 5,a output print a,create proc p1n int,sum int outputasdeclare i intset sum=0set i=1while(i
15、=n)beginset sum=sum+iset i=i+1end,create proc p1n intasdeclare sum int,i intset sum=0set i=1while(i=n)beginset sum=sum+iset i=i+1Endreturn sum,declare a intexec a=P1 5print a,小练习,第8章:存储过程和触发器,练习1:创建一个proc,功能是输入学号和课程号,能够显示相应的成绩?,select degreefrom scorewhere sno=101 and cno=2-124,用查询语句,显示学号为101,课程号为2-
16、124的学生的成绩。?,第8章:存储过程和触发器,第一步:,select degree from scorewhere sno=101 and cno=2-124,创建一个proc,功能是显示学号为101,课程号为2-124的学生的成绩。?,Create proc P1as,第8章:存储过程和触发器,第二步:,创建一个proc,功能是输入学号和课程号,能够显示相应的成绩?,第8章:存储过程和触发器,第三步:,create proc p1x1 int,x2 int,x int outputasselect x=degree from scorewhere sno=x1 and cno=x2,执行
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQLSERVER数据库原理及应用 _存储过程和触发器 SQLSERVER 数据库 原理 应用 存储 过程 触发器

链接地址:https://www.31ppt.com/p-2816891.html