存储过程和触发器.pptx
2025/6/41第十章存储过程和触发器
10.1存储过程10.1.1存储过程概述2025/6/42存储过程(StoredProcedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。一般用来处理需要与数据库进行频繁交互的复杂的业务。因为存储过程具有以下优点:存储过程在服务器端运行,执行速度快。封装业务逻辑也可以使数据库操作人员与应用系统开发人员的分工更明确,支持模块化设计。0102
存储过程执行一次后,其执行计划就驻留在高速缓冲存储器,如果需要再次调用,只需要从高速缓冲存储器中调用,提高系统性能。存储过程可以作为安全机制。通过授予用户对存储过程的操作权限来实现安全机制。01使体现企业规则的运算程序放入数据库服务器中,以便集中控制。02
10.1.2存储过程的分类2025/6/441.系统存储过程系统存储过程存储在master数据库中,以sp_开头,可以在其他数据库中进行调用。如:sp_help就是取得指定对象的相关信息。2.扩展存储过程在SQLServer环境之外执行动态链接库称为扩展存储过程,以XP_开头,用来调用操作系统提供的功能。3.用户自定义的存储过程由用户创建并能完成某一特定功能的存储过程。包括Transact-SQL和CLR两种类型。(1)Transact-SQL存储过程是指保存的Transact-SQL语句集合,可以接受和返回用户提供参数。也可以从数据库向客户端应用程序返回数据。(2)CLR在本书不做详细介绍。
10.1.3建立存储过程2025/6/451.使用对象资源管理器建立存储过程2.使用T-SQL命令建立存储过程语法形式如下:CREATEPROC[EDURE]procedure_name[{@parameterdata_type}[VARYING][=default][OUTPUT]][,...n][WITH?{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}][FORREPLICATION]ASsql_statement[...n]
【例题10.1】创建一个不带参数的存储过程,名称为pro_stu,用于检索学生的姓名、性别和家庭住址。USEscoreGO--判断pro_stu存储过程是否存在,若存在,则删除Ifexists(selectnamefromsysobjectswherename=pro_stuandtype=p)DROPPROCEDUREpro_stuGo--建立存储过程CREATEPROCpro_stuAsSELECTstudent_name,sex,addressFROMstudent
2025/6/47【例题10.2】创建一个带参数的存储过程,名称为pro_class,在执行存储过程的时候输入班级编号,然后检索该班级的学生的详细信息。USEscoreGO--判断pro_class存储过程是否存在,若存在,则删除Ifexists(selectnamefromsysobjectswherename=pro_classandtype=p)DROPPROCEDUREpro_classGo--建立存储过程CREATEPROCpro_class@c_nochar(8)AsSELECT*FROMstudentWHEREclass_id=@c_no
10.1.4存储过程的执行2025/6/48语法形式如下:[[EXEC[UTE]]{[@return_status=]{procedure_name|@procedure_name_var}[[@parameter=]{value|@variable[OUTPUT]|[DEFAULT]}???[,...n][WITHRECOMPILE]
无参存储过程的执行EXECpro_stu【例题10.3】执行在例题10.1中创建的存储过程pro_stu。01在执行带参存储过程的时候参数有以下几种传递方式:带参存储过程的执行(1)顺序法02
CREATEPROCpro_update@s_idchar(10),@c_idchar(5),@resultint--参数ASUPDATEscoreSETgrade=@resultWHEREstudent_id=@s_idANDcourse_id=@c_id/*顺序法执行存储过程,把0801101