第10章 存储过程和触发器课件.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《第10章 存储过程和触发器课件.ppt》由会员分享,可在线阅读,更多相关《第10章 存储过程和触发器课件.ppt(30页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第10章章 存储过程、触发器存储过程、触发器n存储过程、触发器和游标是存储过程、触发器和游标是SQL Server数据库的三个重要组成部数据库的三个重要组成部分。分。SQL Server 2008使用它们从不同方面提高数据处理能力。使用它们从不同方面提高数据处理能力。n在在SQL Server 2008中,可以像其他程序设计语言一样定义子程中,可以像其他程序设计语言一样定义子程序,称为存储过程。存储过程是序,称为存储过程。存储过程是SQL Server 2008提供的最强大提供的最强大的工具之一。理解并运用它,可以创建健壮、安全且具有良好性的工具之一。理解并运用它,可以创建健壮、安全且具有良
2、好性能的数据库,可以为用户实现最复杂的商业事务。能的数据库,可以为用户实现最复杂的商业事务。n触发器是一种特殊类型的存储过程:它通过事件触发而被自动执触发器是一种特殊类型的存储过程:它通过事件触发而被自动执行。自动执行意味着更少的手工操作以及更小的出错机率。触发行。自动执行意味着更少的手工操作以及更小的出错机率。触发器用于强制复杂的完整性检查,审核更改,维护不规范的数据等器用于强制复杂的完整性检查,审核更改,维护不规范的数据等等。等。SQL Server 2008允许允许DML语句和语句和DDL语句创建触发器,可语句创建触发器,可以引发以引发AFTER或者或者INSTEAD OF触发事件。触发
3、事件。n游标主要用于实现一些不能使用面向集合的语句实现的操作。通游标主要用于实现一些不能使用面向集合的语句实现的操作。通过游标,过游标,SQL Server提供了一个对结果集进行逐行处理的能力。提供了一个对结果集进行逐行处理的能力。可以把游标看为一种特殊的指针,它可以指向结果集中的任意位可以把游标看为一种特殊的指针,它可以指向结果集中的任意位置,在查询数据的同时对数据进行处理。置,在查询数据的同时对数据进行处理。本章学习目标:本章学习目标:n了解存储过程、触发器和游标的基本概念与特了解存储过程、触发器和游标的基本概念与特点点n掌握存储过程的基本类型和相关操作掌握存储过程的基本类型和相关操作n掌
4、握触发器的类型与相关操作掌握触发器的类型与相关操作10.1 存储过程存储过程n通过前面的学习,我们能够编写并运行通过前面的学习,我们能够编写并运行T-SQL程序以完成各种不同的应用。保存程序以完成各种不同的应用。保存T-SQL程序程序的方法有两种:一种是在本地保存程序的源文的方法有两种:一种是在本地保存程序的源文件,运行时先打开源文件再执行程序;另一种件,运行时先打开源文件再执行程序;另一种方法即将程序存储为存储过程,运行时调用存方法即将程序存储为存储过程,运行时调用存储过程执行。储过程执行。n因为存储过程是由一组因为存储过程是由一组T-SQL语句构成的,要语句构成的,要使用存储过程,我们必需
5、熟悉前面几章所讨论使用存储过程,我们必需熟悉前面几章所讨论的基本的的基本的T-SQL语句,并且需要了解掌握一些语句,并且需要了解掌握一些关于函数、过程的概念。关于函数、过程的概念。10.1.1 存储过程的基本概念存储过程的基本概念n存储过程是事先编好的、存储在数据库中一组被编译存储过程是事先编好的、存储在数据库中一组被编译了的了的T-SQL命令集合,这些命令用来完成对数据库的命令集合,这些命令用来完成对数据库的指定操作:存储过程可以接收用户的输入参数、向客指定操作:存储过程可以接收用户的输入参数、向客户端返回表格或标量结果和消息、调用数据定义语言户端返回表格或标量结果和消息、调用数据定义语言
6、(DDL) 和数据操作语言和数据操作语言 (DML) 语句,然后返回输出语句,然后返回输出参数。参数。n通过定义可以看到,存储过程起到了我们在其他语言通过定义可以看到,存储过程起到了我们在其他语言中所说的子程序的作用,我们可以将经常执行的管理中所说的子程序的作用,我们可以将经常执行的管理任务或者复杂的业务规则,预先用任务或者复杂的业务规则,预先用T-SQL语句写好并语句写好并保存为存储过程保存为存储过程, 当需要数据库提供与该存储过程的当需要数据库提供与该存储过程的功能相同的服务时,只需要使用功能相同的服务时,只需要使用EXECUTE命令,即命令,即可调用存储过程完成命令。可调用存储过程完成命
7、令。储过程的优点:储过程的优点:n1. 减少网络流量:存储过程在数据库服务器端执行,只向客户端返回执行结果。减少网络流量:存储过程在数据库服务器端执行,只向客户端返回执行结果。因此可以将在网络中要发送的数百行代码,编写为一条存储过程,这样客户端只因此可以将在网络中要发送的数百行代码,编写为一条存储过程,这样客户端只需要提交存储过程的名称和参数,即可实现相应功能,节省了网络流量,提高了需要提交存储过程的名称和参数,即可实现相应功能,节省了网络流量,提高了执行的效率。此外,由于所有的操作都在服务器端完成,避免了在客户端和服务执行的效率。此外,由于所有的操作都在服务器端完成,避免了在客户端和服务器端
8、之间的多次往返。存储过程只需要将最终结果通过网络传输到客户端。器端之间的多次往返。存储过程只需要将最终结果通过网络传输到客户端。n2. 提高系统性能:一般提高系统性能:一般T-SQL语句每执行一次就需要编译一次,而存储过程只在语句每执行一次就需要编译一次,而存储过程只在创建时进行编译,被编译后存放在数据库服务器的过程高速缓存中,当使用时,创建时进行编译,被编译后存放在数据库服务器的过程高速缓存中,当使用时,服务器不必再重新分析和编译它们。因此,当对数据库进行复杂操作时(如对多服务器不必再重新分析和编译它们。因此,当对数据库进行复杂操作时(如对多个表进行个表进行UPDATE、INSERT或或DE
9、LETE操作时),可将这些复杂操作用存储过操作时),可将这些复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用,节省了分析、解析和优化代程封装起来与数据库提供的事务处理结合一起使用,节省了分析、解析和优化代码所需的码所需的CPU资源和时间。资源和时间。n3. 安全性高:使用存储过程可以完成所有数据库操作,并且可授予没有直接执行安全性高:使用存储过程可以完成所有数据库操作,并且可授予没有直接执行存储过程中语句的权限的用户,也可执行该存储过程的权限。另外可以防止用户存储过程中语句的权限的用户,也可执行该存储过程的权限。另外可以防止用户直接访问表,强制用户使用存储过程执行特定的任务。直接访
10、问表,强制用户使用存储过程执行特定的任务。n4. 可重用性:存储过程只需创建并存储在数据库中,以后即可任意在程序中调用可重用性:存储过程只需创建并存储在数据库中,以后即可任意在程序中调用该过程。存储过程可独立于程序源代码而单独修改,减少数据库开发人员的工作该过程。存储过程可独立于程序源代码而单独修改,减少数据库开发人员的工作量。量。n5. 可自动完成需要预先执行的任务:存储过程可以在系统启动时自动执行,完成可自动完成需要预先执行的任务:存储过程可以在系统启动时自动执行,完成一些需要预先执行的任务,而不必在系统启动后再进行人工操作。一些需要预先执行的任务,而不必在系统启动后再进行人工操作。10.
11、1.2 存储过程的类型存储过程的类型1. 系统存储过程系统存储过程2. 扩展存储过程扩展存储过程3.用户存储过程用户存储过程n用户存储过程在用户数据库中创建,通常与数据库对象进行交互,用户存储过程在用户数据库中创建,通常与数据库对象进行交互,用于完成特定数据库操作任务,可以接受和返回用户提供的参数,用于完成特定数据库操作任务,可以接受和返回用户提供的参数,名称不能以名称不能以sp_为前缀。为前缀。n在在SQL Server 2008中,用户存储过程有两种类型:中,用户存储过程有两种类型:Transact-SQL存储过程和存储过程。存储过程和存储过程。nTransact-SQL存储过程保存存储过
12、程保存T-SQL语句的集合,可以接受和返回语句的集合,可以接受和返回用户提供的参数,也可以从数据库向客户端应用程序返回数据;用户提供的参数,也可以从数据库向客户端应用程序返回数据;nCLR存储过程是指对存储过程是指对Microsoft.NET Framework公共语言运行时公共语言运行时方法的引用,可以接受和返回用户提供的参数。它们在方法的引用,可以接受和返回用户提供的参数。它们在.NET Framework程序集中是作为类的公共静态方法实现的程序集中是作为类的公共静态方法实现的10.1.3 用户存储过程的创建与执行用户存储过程的创建与执行1. 创建和执行用户存储过程实例创建和执行用户存储过
13、程实例n创建用户存储过程是通过编辑代码实现的。下面通过一个实例介绍创建创建用户存储过程是通过编辑代码实现的。下面通过一个实例介绍创建用户存储过程的一般步骤。用户存储过程的一般步骤。n【例【例10-1】创建名为】创建名为snoquery的存储过程:通过用户输入学生学号来查的存储过程:通过用户输入学生学号来查询学生的姓名、年龄、性别和所属院系。询学生的姓名、年龄、性别和所属院系。(1)启动)启动SSMS,展开服务器。,展开服务器。(2)展开所需的)展开所需的“数据库数据库”文件夹,展开要在其中创建存储过程的数据库。本例文件夹,展开要在其中创建存储过程的数据库。本例中,我们展开中,我们展开stuin
14、fo数据库。数据库。(3)展开)展开“可编程性可编程性”文件夹,在文件夹,在“存储过程存储过程”文件夹上右击鼠标,在弹出的快捷文件夹上右击鼠标,在弹出的快捷菜单中选择菜单中选择“新建存储过程新建存储过程”项。项。(4)系统弹出)系统弹出T-SQL语句编写窗口,其中的代码是创建存储过程的格式说明。语句编写窗口,其中的代码是创建存储过程的格式说明。我们输入以下我们输入以下T-SQL代码:代码:CREATE PROCEDURE snoqueryxuehao char(10)ASSELECT sno 学号学号,sname 学生姓名学生姓名,sage 年龄年龄,ssex 性别性别,sdept 所属院系所
15、属院系FROM studentWHERE sno=xuehao(5)代码输入结束后,只要将以上代码在)代码输入结束后,只要将以上代码在“查询分析器查询分析器”里执行一次,系统就会里执行一次,系统就会在当前数据库中创建一个名为在当前数据库中创建一个名为snoquery的存储过程。点击刷新按钮,选择的存储过程。点击刷新按钮,选择stuinfo数据库,在左边的树型列表中选择数据库,在左边的树型列表中选择“存储过程存储过程”,就可以看到属于,就可以看到属于dbo(database owner)的存储过程)的存储过程dbo.snoquery。【例【例10-2】使用存储过程】使用存储过程snoquery查
16、询学号为查询学号为“20070102”学生的信息。学生的信息。nT-SQL语句为:语句为: EXECUTE snoquery 200701022. 创建存储过程的创建存储过程的T-SQL语句语句n基本语法格式为:基本语法格式为:CREATE PROCEDURE - 定义存储过程名称定义存储过程名称参数名称参数名称 数据类型数据类型-定义参数及其数据类型定义参数及其数据类型=defaultOUTPUT ,n1 -定义参数的属性定义参数的属性ASSQL语句语句,n2-执行的操作执行的操作3. 运行存储过程的运行存储过程的T-SQL语句语句n存储过程创建完成后,可以使用存储过程创建完成后,可以使用E
17、XECUTE语语句调用它。句调用它。n基本语法格式如下:基本语法格式如下:EXECUTE存储过程名称存储过程名称参数名称参数名称= value| variable OUTPUT| DEFAULT ,n110.1.4 存储过程的查看、修改和删除存储过程的查看、修改和删除n展开所选数据库数据库展开所选数据库数据库“可编程性可编程性”文件夹文件夹“存储存储过程过程”文件夹,即可以看到数据库的系统存储过程和文件夹,即可以看到数据库的系统存储过程和用户存储过程;系统存储过程方便用户管理数据库的用户存储过程;系统存储过程方便用户管理数据库的有关对象。有关对象。qsp_help:用于查看有关存储过程的名称列
18、表。向用户报告:用于查看有关存储过程的名称列表。向用户报告有关数据库对象、用户定义数据类型或所提供的数据类型的有关数据库对象、用户定义数据类型或所提供的数据类型的摘要信息;摘要信息;qsp_helptext:用于显示规则、默认值、未加密的存储过程、:用于显示规则、默认值、未加密的存储过程、用户定义函数、触发器或视图的过程定义代码。用户定义函数、触发器或视图的过程定义代码。n我们可以利用下面的语句查看存储过程的信息:我们可以利用下面的语句查看存储过程的信息:EXECUTE sp_help 存储过程名称存储过程名称 用于查看存储过程的对象信息用于查看存储过程的对象信息EXECUTE sp_help
19、text 存储过程名称存储过程名称 用于查看存储过程的代码文本信息用于查看存储过程的代码文本信息【例【例10-3】查看存储过程】查看存储过程snoquery的对象信息和的对象信息和T-SQL代码。代码。n查看对象信息的查看对象信息的T-SQL语句为:语句为:USE stuinfoEXECUTE sp_help snoqueryn待查看的存储过程必须在当前数据库中,因此,要使待查看的存储过程必须在当前数据库中,因此,要使用用USE stuinfo语句打开数据库。可以看到存储过程语句打开数据库。可以看到存储过程的相关信息及其中的参数信息。的相关信息及其中的参数信息。n查看代码信息的查看代码信息的T
20、-SQL语句为:语句为:USE stuinfoEXECUTE sp_helptext snoqueryn可以看到存储过程可以看到存储过程snoquery的详细的详细T-SQL代码。代码。2.修改存储过程修改存储过程n基本语法格式:基本语法格式:ALTER PROCEDURE 参数名称参数名称 数据类型数据类型=defaultOUTPUT ,n1ASSQL语句语句,n2各参数的操作与创建存储过程相同。各参数的操作与创建存储过程相同。 【例【例10-4】修改存储过程】修改存储过程snoquery:通过用户:通过用户输入学生姓名来查询学生的姓名、年龄、性别输入学生姓名来查询学生的姓名、年龄、性别和所
21、属院系。修改完成后查询学生王小华的信和所属院系。修改完成后查询学生王小华的信息。息。nT-SQL语句为:语句为:ALTER PROCEDURE snoqueryname nchar(10)ASSELECT sno 学号学号,sname 学生姓名学生姓名,sage 年龄年龄,ssex 性性别别,sdept 所属院系所属院系FROM studentWHERE sname=nameGOEXECUTE snoquery N王小华王小华3. 删除存储过程删除存储过程n当不再使用存储过程时,可以在当不再使用存储过程时,可以在SSMS中选择对应的中选择对应的数据库和存储过程,单击数据库和存储过程,单击“删除
22、删除”按钮,也可以使用按钮,也可以使用DROP PROCEDURE语句可以将其永久从数据库中语句可以将其永久从数据库中删除。在删除之前,需要确认该存储过程没有任何函删除。在删除之前,需要确认该存储过程没有任何函数依赖关系。数依赖关系。n语法格式为:语法格式为:DROP PROCEDURE ,n【例【例10-5】删除存储过程】删除存储过程snoquerynT-SQL语句为:语句为:USE stuinfoDROP PROCEDURE snoquery10.2 触发器触发器nSQL Server 2008提供两种主要机制来强制使提供两种主要机制来强制使用业务规则和数据完整性:约束和触发器。用业务规则
23、和数据完整性:约束和触发器。n我们使用我们使用ALTER TABLE和和CREATE TABLE语句声明字段的域完整性,使用语句声明字段的域完整性,使用PRIMARY KEY 和和 FOREIGN KEY约束实现表之间的参约束实现表之间的参照完整性。对于数据库中约束所不能保证的复照完整性。对于数据库中约束所不能保证的复杂的参照完整性和数据的一致性我们使用触发杂的参照完整性和数据的一致性我们使用触发器来实现。器来实现。10.2.1 触发器概述触发器概述n1. 触发器的功能触发器的功能n在在SQL Server内部,触发器被看作是存储过程,它与存储过程所经历的处理过程内部,触发器被看作是存储过程,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第10章 存储过程和触发器课件 10 存储 过程 触发器 课件
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内