SQLServer存储过程与触发器课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《SQLServer存储过程与触发器课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQLServer 存储 过程 触发器 课件
- 资源描述:
-
1、第第4 4章章SQL Server 存储过程与存储过程与触发器触发器2021/5/414.1 SQL Server 存储过程4.1.1存储过程概述存储过程概述 存储过程存储过程(Stored Procedure)是一组为是一组为了完成特定功能了完成特定功能T-SQL语句集合语句集合,经编译后经编译后存储在存储在SQL Server服务器端数据库中。存服务器端数据库中。存储过程可以分为两类储过程可以分为两类:系统存储过程系统存储过程和和自定自定义存储过程义存储过程。2021/5/42系统存储过程系统存储过程2021/5/43系统存储过程系统存储过程系统存储过程在系统存储过程在SQL Server
2、安装成功后安装成功后,就就已经存储在系统数据库已经存储在系统数据库Master中中,这些存储过这些存储过程都是以程都是以sp_为前缀命名的为前缀命名的 它们主要是从系统表中获取信息它们主要是从系统表中获取信息,系统管理员可以系统管理员可以通过简单调用系统存储过程而完成复杂的通过简单调用系统存储过程而完成复杂的SQL Server管理工作。可以通过系统存储过程完成许管理工作。可以通过系统存储过程完成许多管理性或信息的操作。多管理性或信息的操作。系统存储过程在系统存储过程在Master数据库中数据库中,在其他数据库中在其他数据库中可以直接调用可以直接调用,调用时不必在存储过程名前加上数调用时不必在
3、存储过程名前加上数据库名。据库名。2021/5/44自定义存储过程自定义存储过程自定义存储过程是由用户创建并能完成自定义存储过程是由用户创建并能完成某一特定功能的存储过程。某一特定功能的存储过程。2021/5/45存储过程的优点存储过程的优点1提高应用程序的通用性和可移植性提高应用程序的通用性和可移植性2可以更有效地管理用户操作数据库的权限可以更有效地管理用户操作数据库的权限 3可以提高可以提高T-SQL的速度的速度4减轻服务器的负担减轻服务器的负担5块化程序设计。块化程序设计。6减少操作错误。减少操作错误。7能自动处理复杂的或敏感的事务。能自动处理复杂的或敏感的事务。8可以实现管理任务自动化
4、。可以实现管理任务自动化。2021/5/464.1.24.1.2存储过程的创建与执行存储过程的创建与执行创建前确定创建前确定 所有的输入参数以及传给调用者的输出参数。所有的输入参数以及传给调用者的输出参数。被执行的针对数据库的操作语句被执行的针对数据库的操作语句,包括调用其它存包括调用其它存储过程的语句。储过程的语句。返回给调用者的状态值返回给调用者的状态值,以指明调用是成功还是失以指明调用是成功还是失败。败。一个存储过程的最大尺寸为一个存储过程的最大尺寸为128M2021/5/471.1.直接创建存储过程直接创建存储过程(1)打开打开Microsoft SQL Server Manager管
5、理器管理器(2)单击数据库前面的单击数据库前面的“+”号号,然后单击然后单击“Material_Data1”数据库前面的数据库前面的“+”号号,再单击再单击“可编程性可编程性”前面的前面的“+”号号,选择选择“存储过程存储过程”,单击鼠标右键单击鼠标右键,在弹出的快在弹出的快捷菜单中单击捷菜单中单击“新建存储过程新建存储过程”命令。命令。(3)打开了一个创建存储过程的数据库引打开了一个创建存储过程的数据库引擎查询模板擎查询模板,修改相应参数即可。修改相应参数即可。2021/5/48直接创建存储过程直接创建存储过程2021/5/492.2.代码创建存储过程代码创建存储过程语法语法CREATE P
6、ROCEDURE procedure_name;number parameter data_type VARYING=defaultOUTPUT,.n WITH RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION AS sql_statement .n begin 命令行或命令块命令行或命令块 end2021/5/410说明说明procedure_name:用于指定要创建的存储过程的名称。用于指定要创建的存储过程的名称。number:该参数是可选的整数该参数是可选的整数,它用来对同名的存储过程分组它用来对同名的存储过程分组,以便用一条以便用一条 DROP PRO
7、CEDURE 语句即可将同组的过程一起语句即可将同组的过程一起除去。除去。parameter:过程中的参数。在过程中的参数。在 CREATE PROCEDURE 语句语句中可以声明一个或多个参数。中可以声明一个或多个参数。data_type:用于指定参数的数据类型。用于指定参数的数据类型。Default:用于指定参数的默认值。用于指定参数的默认值。OUTPUT:表明该参数是一个返回参数。表明该参数是一个返回参数。recompile:表示每次执行此存储过程时都重新编译一次表示每次执行此存储过程时都重新编译一次 encryption:所创建的存储过程的内容会被加密所创建的存储过程的内容会被加密 2
8、021/5/4113.3.代码执行存储过程代码执行存储过程利用利用T-SQL执行存储过程的语法格式如下执行存储过程的语法格式如下:execute 过程名过程名参数值参数值,output(1)没有参数的存储过程创建没有参数的存储过程创建 create proc hyprocl as select*from manager where wage 1800 执行该存储过程执行该存储过程 execute hyprocl2021/5/412(2)(2)有参数存储过程创建有参数存储过程创建create proc hyproc2 mingz int,maxgz intas select*from manag
9、er where wage between mingz and maxgz2021/5/413执行实例执行实例假设要显示工资在假设要显示工资在1000到到2000之间的之间的manager信息信息,具体代码具体代码:execute hyproc2 1005,18002021/5/4144.1.3 4.1.3 修改存储过程修改存储过程修改存储过程具体格式如下修改存储过程具体格式如下:alter proc过程名过程名 parameter参数类型参数类型 parameter参数类型参数类型output as sql_statement .n begin 命令行或命令块命令行或命令块 end2021/
10、5/415实例实例修改存贮过程修改存贮过程hyproc2,输出输出manager性别分类人员性别分类人员数与总工资。数与总工资。alter proc hyproc2 sex1 char(2),managercount int output,wagetotal real output asbegin Select*from manager select managercount=count(wage)from manager where sex=sex1 select wagetotal=sum(wage)from manager where sex=sex1 end 2021/5/416实例实
11、例假设要显示假设要显示manager信息及输出工资的信息及输出工资的最大值与平均值最大值与平均值,具体代码如下具体代码如下:Declare x1 char(2),x2 realexecute hyproc2 男男,x1 output,x2 output2021/5/4174.2 SQL Server 4.2 SQL Server 触发器触发器 触发器是一种特殊类型的触发器是一种特殊类型的存储过程存储过程,是用户自是用户自定义的复杂的定义的复杂的完整性控制完整性控制过程。过程。特点特点:功能强、开销高功能强、开销高维护行级数据的完整性维护行级数据的完整性与与CHECK约束相比约束相比,能实现更加
12、复杂的数据完能实现更加复杂的数据完整性整性2021/5/418数据完整性数据完整性完整性是指数据的完整性是指数据的 正确性正确性 相容性(一致性)相容性(一致性)三类基本完整性规则三类基本完整性规则 域完整性规则域完整性规则使基本表的使基本表的列列输入有效。输入有效。控制域完整性有效的方法有控制域完整性有效的方法有:限制限制数据类型、格式、可能数据类型、格式、可能的取值范围、修改列值时必须满足的条件的取值范围、修改列值时必须满足的条件等。等。实体完整性规则实体完整性规则 实体完整性规则用来约束现实世界中的实体是可区分的实体完整性规则用来约束现实世界中的实体是可区分的,即它们具有即它们具有唯一性
13、标识唯一性标识。这一规则在关系模型中的体现。这一规则在关系模型中的体现是基本表所有主属性都不能取空值(是基本表所有主属性都不能取空值(NULL)。)。参照完整性规则参照完整性规则参照完整性规则用来约束具有参照关系的两个表中参照完整性规则用来约束具有参照关系的两个表中,主码主码和外码和外码的数据要保持一致。的数据要保持一致。2021/5/419触发器的作用触发器的作用完成比约束更复杂的数据约束完成比约束更复杂的数据约束检查所做的检查所做的SQL是否允许是否允许 触发器可以检查触发器可以检查SQL所做的操作是否被允许。所做的操作是否被允许。例如例如:在产品库存表里在产品库存表里,如果要删除一条产品
14、记录如果要删除一条产品记录,在删除记录时在删除记录时,触发器可以检查该产品库存数量是否为零触发器可以检查该产品库存数量是否为零,如果不为零则取消如果不为零则取消该删除操作。该删除操作。修改其它数据表里的数据修改其它数据表里的数据 当一个当一个SQL语句对数据表进行操作的时候语句对数据表进行操作的时候,触发器可以根据触发器可以根据该该SQL语句的操作情况来对另一个数据表进行操作。语句的操作情况来对另一个数据表进行操作。例如例如:一个订单取消的时候一个订单取消的时候,那么触发器可以自动修改产品库存那么触发器可以自动修改产品库存表表,在订购量的字段上减去被取消订单的订购数量。在订购量的字段上减去被取
15、消订单的订购数量。调用更多的存储过程调用更多的存储过程 触发器本身就是一种存储过程触发器本身就是一种存储过程,而存储过程是可以嵌套使用而存储过程是可以嵌套使用的的,所以触发器也可以调用一个或多过存储过程。所以触发器也可以调用一个或多过存储过程。2021/5/420触发器的作用触发器的作用发送发送SQL Mail 在在SQL语句执行完之后语句执行完之后,触发器可以判断更改过的记录是否达到一触发器可以判断更改过的记录是否达到一定条件定条件,如果达到这个条件的话如果达到这个条件的话,触发器可以自动调用触发器可以自动调用SQL Mail来来发送邮件。发送邮件。例如例如:当一个订单交费之后当一个订单交费
16、之后,可以物流人员发送可以物流人员发送Email,通知他尽快发货。通知他尽快发货。返回自定义的错误信息返回自定义的错误信息 约束是不能返回信息的约束是不能返回信息的,而触发器可以。而触发器可以。例如插入一条重复记录时例如插入一条重复记录时,可以返回一个具体的友好的错误信息给前台可以返回一个具体的友好的错误信息给前台应用程序。应用程序。更改原本要操作的更改原本要操作的SQL语句语句 触发器可以修改原本要操作的触发器可以修改原本要操作的SQL语句语句例如原本的例如原本的SQL语句是要删除数据表里的记录语句是要删除数据表里的记录,但该数据表里的记录是但该数据表里的记录是最要记录最要记录,不允许删除的
17、不允许删除的,那么触发器可以不执行该语句。那么触发器可以不执行该语句。防止数据表构结更改或数据表被删除防止数据表构结更改或数据表被删除 为了保护已经建好的数据表为了保护已经建好的数据表,触发器可以在接收到触发器可以在接收到Drop和和Alter开开头的头的SQL语句里语句里,不进行对数据表的操作。不进行对数据表的操作。2021/5/421触发器的种类触发器的种类在在SQL Server 2005中中,触发器可以分为两大类触发器可以分为两大类:DML触发器和触发器和DDL触发器触发器DML触发器触发器:DML触发器是当数据库服务器中发生数据操作语言(触发器是当数据库服务器中发生数据操作语言(Da
18、ta Manipulation Language)事件时执行的存储过程。)事件时执行的存储过程。DML触发器又分为两类触发器又分为两类:After触发器和触发器和Instead Of触发器触发器DDL触发器触发器:DDL触发器是在响应数据定义语言(触发器是在响应数据定义语言(Data Definition Language)事件时执行的存储过程。)事件时执行的存储过程。DDL触发器一般用于触发器一般用于执行数据库中管理任务。如审核和规范数据库操作、防止执行数据库中管理任务。如审核和规范数据库操作、防止数据库表结构被修改等。数据库表结构被修改等。SQL SERVER 2005新增添功能新增添功能
19、2021/5/422AfterAfter触发器和触发器和Instead OfInstead Of触发器触发器After触发器是在记录更变完之后才被激活执触发器是在记录更变完之后才被激活执行的。行的。以删除记录为例以删除记录为例:SQL Server先将要删除的记录先将要删除的记录存放在删除表里存放在删除表里,然后把数据表里的记录删除。然后把数据表里的记录删除。再激活再激活After触发器触发器,执行执行After触发器里的触发器里的SQL语语句。句。执行完毕之后执行完毕之后,删除内存中的删除表删除内存中的删除表,退出整个操退出整个操作。作。Instead Of触发器是在这些操作进行之前就触发器
20、是在这些操作进行之前就激活了激活了,并且不再去执行原来的并且不再去执行原来的SQL操作操作,而去而去运行触发器本身的运行触发器本身的SQL语句。语句。2021/5/423触发器的工作原理触发器的工作原理在在SQL Server 2005SQL Server 2005里里,为每个为每个DMLDML触发器都定义了两触发器都定义了两个特殊的表个特殊的表,一个是插入表一个是插入表,一个是删除表。一个是删除表。这两个表是建在数据库服务器的内存中的这两个表是建在数据库服务器的内存中的,是由系统管理的是由系统管理的逻辑表逻辑表,而不是真正存储在数据库中的物理表。而不是真正存储在数据库中的物理表。对于这两个表
21、对于这两个表,用户只有读取的权限用户只有读取的权限,没有修改的权限。没有修改的权限。这两个表的结构与触发器所在数据表的结构是完全一致的这两个表的结构与触发器所在数据表的结构是完全一致的,当触发器的工作完成之后当触发器的工作完成之后,这两个表也将会从内存中删除。这两个表也将会从内存中删除。插入表里存放的是更新前的记录插入表里存放的是更新前的记录对于插入记录操作来说对于插入记录操作来说,插入表里存放的是要插入的数据插入表里存放的是要插入的数据对于更新记录操作来说对于更新记录操作来说,插入表里存放的是要更新的记录。插入表里存放的是要更新的记录。删除表里存放的是更新后的记录删除表里存放的是更新后的记录
22、对于更新记录操作来说对于更新记录操作来说,删除表里存放的是更新前的记录删除表里存放的是更新前的记录(更新完后即被删除)(更新完后即被删除);对于删除记录操作来说对于删除记录操作来说,删除表里存入的是被删除的旧记录。删除表里存入的是被删除的旧记录。2021/5/424触发器的工作原理触发器的工作原理激活触发器激活触发器的动作的动作Inserted表表Deleted表表Insert存放要插入存放要插入的记录的记录Update存放要更新存放要更新的记录的记录存放更新前的旧存放更新前的旧记录记录Delete存放要删除的旧存放要删除的旧记录记录2021/5/425其他注意事项其他注意事项After触发器
23、只能用于触发器只能用于数据表数据表中中,Instead Of触发器可触发器可以用于以用于数据表和视图数据表和视图上上,但两种触发器都不可以建立但两种触发器都不可以建立在在临时表临时表上。上。一个数据表可以有多个触发器一个数据表可以有多个触发器,但是一个触发器只能但是一个触发器只能对应一个表。对应一个表。在同一个数据表中在同一个数据表中,对每个操作(如对每个操作(如Insert、Update、Delete)而言可以建立)而言可以建立许多个许多个After触发器触发器,但但Instead Of触发器针对每个操作只有建立触发器针对每个操作只有建立一个一个。如果针对某个操作即设置了如果针对某个操作即设
展开阅读全文