其他数据库对象学习资料_第1页
其他数据库对象学习资料_第2页
其他数据库对象学习资料_第3页
其他数据库对象学习资料_第4页
其他数据库对象学习资料_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第10章章 其他数据库对象其他数据库对象学习目标本章重点本章内容12/24/20211学习目标学习目标l从业务数据角度来看,同一种业务数据有可能分散在不同的表中,如从业务数据角度来看,同一种业务数据有可能分散在不同的表中,如何从一个数据库对象中查看这些分散存储的数据呢?何从一个数据库对象中查看这些分散存储的数据呢?l从安全角度来看,不同的操作人员或许只能看到表中不同部分的数据。从安全角度来看,不同的操作人员或许只能看到表中不同部分的数据。l从数据的应用角度来看,一个报表中的数据往往来自于多个不同的表从数据的应用角度来看,一个报表中的数据往往来自于多个不同的表中,如何提高报表的设计效率呢?视图

2、是解决这些问题的一种有效手中,如何提高报表的设计效率呢?视图是解决这些问题的一种有效手段。段。l存储过程是一个可重用的代码模块,可以高效率地完成指定的操作。存储过程是一个可重用的代码模块,可以高效率地完成指定的操作。l触发器是一种特殊类型的存储过程,可以实现自动化的操作。触发器是一种特殊类型的存储过程,可以实现自动化的操作。l用户定义函数是由用户根据自己应用程序的需要而定义的可以完成特用户定义函数是由用户根据自己应用程序的需要而定义的可以完成特定操作的函数。定操作的函数。l本章将全面研究视图、存储过程、触发器、用户定义函数等数据库对本章将全面研究视图、存储过程、触发器、用户定义函数等数据库对象

3、的特点和使用方式。象的特点和使用方式。12/24/20212本章重点本章重点l视图特点和类型视图特点和类型l管理视图管理视图l存储过程特点和类型存储过程特点和类型l管理存储过程管理存储过程l触发器特点和类型触发器特点和类型l管理触发器管理触发器l用户定义函数用户定义函数12/24/20213本章内容本章内容10.1 视图视图10.2 存储过程存储过程10.3 触发器触发器10.4 用户定义函数用户定义函数10.5 上机练习上机练习10.6 习题习题12/24/20214本章内容本章内容10.1 视图视图10.2 存储过程存储过程10.3 触发器触发器10.4 用户定义函数用户定义函数10.5

4、上机练习上机练习10.6 习题习题12/24/2021510.1 视图视图l本节全面研究与视图有关的内容。本节全面研究与视图有关的内容。l首先,分析视图的作用和存在意义。首先,分析视图的作用和存在意义。l其次,研究了视图的类型和特点。其次,研究了视图的类型和特点。l接下来,探讨创建视图技术。接下来,探讨创建视图技术。l然后,讨论如何通过视图修改表中数据。然后,讨论如何通过视图修改表中数据。l最后,浏览如何通过图形化工具来创建和最后,浏览如何通过图形化工具来创建和维护视图。维护视图。12/24/20216概述概述l数据是存储在表中,对数据的操纵主要是通过表进行的。但是,仅仅数据是存储在表中,对数

5、据的操纵主要是通过表进行的。但是,仅仅通过表操纵数据会带来一系列的性能、安全、效率等问题。下面,对通过表操纵数据会带来一系列的性能、安全、效率等问题。下面,对这些问题进行分析。这些问题进行分析。l从业务数据角度来看,由于数据库设计时考虑到数据异常等问题,同从业务数据角度来看,由于数据库设计时考虑到数据异常等问题,同一种业务数据有可能被分散在不同的表中,但是对这种业务数据的使一种业务数据有可能被分散在不同的表中,但是对这种业务数据的使用经常是同时使用的。前面讲过的连接、子查询、联合等技术就是解用经常是同时使用的。前面讲过的连接、子查询、联合等技术就是解决这种问题的一种手段。但是,对于多个表来说这

6、些操作都是比较复决这种问题的一种手段。但是,对于多个表来说这些操作都是比较复杂的,能不能只通过一个数据库对象就可以同时看到这些分散存储的杂的,能不能只通过一个数据库对象就可以同时看到这些分散存储的业务数据呢?如果能得话,将大大简化查询语句的复杂程度。业务数据呢?如果能得话,将大大简化查询语句的复杂程度。l从数据安全角度来看,由于工作性质和需求不同,不同的操作人员只从数据安全角度来看,由于工作性质和需求不同,不同的操作人员只是需要查看表中的部分数据,不能查看表中的所有数据。是需要查看表中的部分数据,不能查看表中的所有数据。 l从数据的应用角度来看,在设计报表时,需要明确地指定数据的来源从数据的应

7、用角度来看,在设计报表时,需要明确地指定数据的来源途径和方式。能不能采取有效手段,提高报表的设计效率呢?途径和方式。能不能采取有效手段,提高报表的设计效率呢?l解决上述问题的一种有效手段就是视图。解决上述问题的一种有效手段就是视图。 12/24/20217视图的内容视图的内容l基表的列的子集或行的子集,也就是说视图可以是基表的其中一部分。基表的列的子集或行的子集,也就是说视图可以是基表的其中一部分。l两个或多个基表的联合,也就是说视图是对多个基表进行联合运算检两个或多个基表的联合,也就是说视图是对多个基表进行联合运算检索的索的SELECT语句。语句。l两个或多个基表的连接,也就是说视图是通过对

8、若干个基表的连接生两个或多个基表的连接,也就是说视图是通过对若干个基表的连接生成的。成的。l基表的统计汇总,也就是说视图不仅是基表的投影,还可以是经过对基表的统计汇总,也就是说视图不仅是基表的投影,还可以是经过对基表的各种复杂运算的结果。基表的各种复杂运算的结果。l另外一个视图的子集,也就是说视图既可以基于表,也可以基于另外另外一个视图的子集,也就是说视图既可以基于表,也可以基于另外一个视图。一个视图。l来自于函数或同义词中的数据。来自于函数或同义词中的数据。l视图和基表的混合,在视图的定义中,视图和基表可以起到同样的作视图和基表的混合,在视图的定义中,视图和基表可以起到同样的作用。用。12/

9、24/20218视图类型视图类型l在在Microsoft SQL Server 2005系统中,可以把系统中,可以把视图分成视图分成3种类型,即标准视图、索引视图和分种类型,即标准视图、索引视图和分区视图。区视图。l一般情况下的视图都是标准视图,它是一个虚拟一般情况下的视图都是标准视图,它是一个虚拟表并不占物理存储空间。如果希望提高聚合多行表并不占物理存储空间。如果希望提高聚合多行数据的视图性能,那么可以创建索引视图。数据的视图性能,那么可以创建索引视图。l索引视图是被物理化的视图,它包含有经过计算索引视图是被物理化的视图,它包含有经过计算的物理数据。的物理数据。l通过使用分区视图,可以连接一

10、台或多台服务器通过使用分区视图,可以连接一台或多台服务器中成员表中的分区数据,使得这些数据看起来就中成员表中的分区数据,使得这些数据看起来就像来自一个表中一样。像来自一个表中一样。12/24/20219创建视图创建视图l在在Microsoft SQL Server 2005系统中,主要使系统中,主要使用用CREATE VIEW语句创建视图。只能在当前数语句创建视图。只能在当前数据库中创建视图。当创建视图时,据库中创建视图。当创建视图时,Microsoft SQL Server首先验证视图定义中所引用的对象是首先验证视图定义中所引用的对象是否存在。否存在。l视图的名称应该符合命名规则。是否指定视

11、图的视图的名称应该符合命名规则。是否指定视图的架构则是可选的。视图的外表和表的外表是一样架构则是可选的。视图的外表和表的外表是一样的,因此为了区别表和视图,建议采用一种命名的,因此为了区别表和视图,建议采用一种命名机制,使人容易分辨出视图和表,例如可以在视机制,使人容易分辨出视图和表,例如可以在视图名称之前使用图名称之前使用vw_作为前缀。作为前缀。12/24/202110【例【例10-1】使用】使用CREATE VIEW语语句创建简单的视图句创建简单的视图 12/24/202111【例【例10-2】使用】使用sp_helptext系统存系统存储过程查看视图信息储过程查看视图信息 12/24/

12、202112【例【例10-3】使用】使用WITH ENCRYPTION子句加子句加密视图定义文本信息密视图定义文本信息 12/24/202113【例【例10-4】使用】使用DROP VIEW语句删语句删除视图除视图 12/24/202114通过视图修改数据通过视图修改数据l无论在什么时候修改视图的数据,实际上无论在什么时候修改视图的数据,实际上都是在修改视图的基表中的数据。在满足都是在修改视图的基表中的数据。在满足一定的限制条件下,可以通过视图自由地一定的限制条件下,可以通过视图自由地插入、删除和更新基表中的数据。插入、删除和更新基表中的数据。l在修改视图时,要注意一些条件在修改视图时,要注意

13、一些条件 12/24/202115【例【例10-5】通过视图修改数据】通过视图修改数据 12/24/202116【例【例10-5】12/24/202117使用使用SQL Server Management Studiol除了使用除了使用CREATE VIEW语句之外,也可语句之外,也可以使用以使用SQL Server Management Studio图形化工具定义视图。图形化工具定义视图。12/24/202118【例【例10-6】使用图形化工具定义视】使用图形化工具定义视图图 12/24/202119本章内容本章内容10.1 视图视图10.2 存储过程存储过程10.3 触发器触发器10.4

14、用户定义函数用户定义函数10.5 上机练习上机练习10.6 习题习题12/24/20212010.2 存储过程存储过程l存储过程可以提高应用程序的设计效率和存储过程可以提高应用程序的设计效率和增强系统的安全性。增强系统的安全性。l本节全面介绍存储过程的特点、类型、创本节全面介绍存储过程的特点、类型、创建及执行等内容。建及执行等内容。12/24/202121存储过程的特点存储过程的特点l存储过程是一个可重用的代码模块,可以高效率存储过程是一个可重用的代码模块,可以高效率地完成指定的操作。在地完成指定的操作。在Microsoft SQL Server 2005系统中,既可以使用系统中,既可以使用T

15、ransact-SQL语言编语言编写存储过程,也可以使用写存储过程,也可以使用CLR方式编写存储过程。方式编写存储过程。使用使用CLR编写存储过程是编写存储过程是Microsoft SQL Server 2005系统与系统与.NET框架紧密集成的一种表现形式。框架紧密集成的一种表现形式。l使用使用Transact-SQL语言编写存储过程而不使用存语言编写存储过程而不使用存储在客户端计算机上的储在客户端计算机上的Transact-SQL语言有许多语言有许多优点优点 12/24/202122存储过程的类型存储过程的类型l在在Microsoft SQL Server 2005系统中,提供了系统中,提

16、供了3种基本的存储过程类型,即用户定义的存储过程、种基本的存储过程类型,即用户定义的存储过程、扩展存储过程和系统存储过程。扩展存储过程和系统存储过程。l用户定义的存储过程是主要的存储过程类型,是用户定义的存储过程是主要的存储过程类型,是封装了可重用代码的模块或例程。封装了可重用代码的模块或例程。l用户定义的存储过程可以接受输入参数、向客户用户定义的存储过程可以接受输入参数、向客户端返回表格或标量结果和消息、调用数据定义语端返回表格或标量结果和消息、调用数据定义语言、数据操纵语言语句,然后返回参数。言、数据操纵语言语句,然后返回参数。l在在Microsoft SQL Server 2005系统中

17、,用户定系统中,用户定义的存储过程又可以分为义的存储过程又可以分为Transact-SQL类型的存类型的存储过程和储过程和CLR类型的存储过程。类型的存储过程。 12/24/202123扩展存储过程扩展存储过程l扩展存储过程是指使用某种变成语言如扩展存储过程是指使用某种变成语言如C语语言创建的外部例程,是可以在言创建的外部例程,是可以在Microsoft SQL Server实例中动态加载和运行的实例中动态加载和运行的DLL。l但是,微软公司宣布从但是,微软公司宣布从Microsoft SQL Server 2005版本开始,将逐步删除扩展存版本开始,将逐步删除扩展存储过程类型,这是因为使用储

18、过程类型,这是因为使用CLR存储过程存储过程可以可靠和安全地替代扩展存储过程的功可以可靠和安全地替代扩展存储过程的功能。能。12/24/202124系统存储过程系统存储过程l系统存储过程是指用来完成系统存储过程是指用来完成Microsoft SQL Server 2005中许多管理活动的特殊存储过程。中许多管理活动的特殊存储过程。l从物理上来看,系统存储过程存储在从物理上来看,系统存储过程存储在Resource系系统数据库中,并且带有统数据库中,并且带有sp_前缀。前缀。l从逻辑上来看,系统存储过程出现在每个系统数从逻辑上来看,系统存储过程出现在每个系统数据库和用户数据库的据库和用户数据库的s

19、ys架构中。架构中。l在在Microsoft SQL Server 2005系统中,主要的系统中,主要的系统存储过程类型和功能如表系统存储过程类型和功能如表10-1所示。所示。12/24/202125创建存储过程的规则创建存储过程的规则l在设计和创建存储过程中应该满足一定的在设计和创建存储过程中应该满足一定的约束和规则。只有满足了这些约束和规则,约束和规则。只有满足了这些约束和规则,才可以创建有效的存储过程。才可以创建有效的存储过程。l虽然说在虽然说在CREATE PROCEDURE语句中可语句中可以包括任意数量和类型的以包括任意数量和类型的Transact-SQL语语句,但是某些特殊的语句是

20、不能包含在存句,但是某些特殊的语句是不能包含在存储过程定义中的。储过程定义中的。 12/24/202126创建存储过程创建存储过程l在在Microsoft SQL Server 2005系统中,可以使系统中,可以使用用CREATE PROCEDURE语句创建存储过程。语句创建存储过程。需要强调的是,必须具有需要强调的是,必须具有CREATE PROCEDURE权限才能创建存储过程,存储过程权限才能创建存储过程,存储过程是架构作用域中的对象,只能在本地数据库中创是架构作用域中的对象,只能在本地数据库中创建存储过程。建存储过程。l在创建存储过程时,应该指定所有的输入参数、在创建存储过程时,应该指定

21、所有的输入参数、执行数据库操作的编程语句、返回至调用过程或执行数据库操作的编程语句、返回至调用过程或批处理表明成功或失败的状态值、捕捉和处理潜批处理表明成功或失败的状态值、捕捉和处理潜在错误的错误处理语句。在错误的错误处理语句。 12/24/202127CREATE PROCEDURE语句语句lCREATE PROCEDURE procedure_namelparameter_name data_type, lWITH procedure_optionlASlsql_statement12/24/202128【例【例10-7】使用】使用CREATE PROCEDURE语句创建存储过程语句创建存

22、储过程 12/24/202129【例【例10-8】使用】使用OUTPUT关键字创关键字创建存储过程建存储过程 12/24/202130执行存储过程执行存储过程l在在Microsoft SQL Server 2005系统中,可系统中,可以使用以使用EXECUTE语句执行存储过程。语句执行存储过程。lEXECUTE语句也可以简写为语句也可以简写为EXEC。l如果将要执行的存储过程需要参数,那么如果将要执行的存储过程需要参数,那么应该在存储过程名称后面带上参数值。应该在存储过程名称后面带上参数值。12/24/202131【例【例10-9】使用】使用EXEC语句执行存储语句执行存储过程过程 12/24

23、/202132【例【例10-10】执行带有参数的存储过】执行带有参数的存储过程程 12/24/202133【例【例10-11】在执行】在执行EXEC语句时引语句时引用参数和使用用参数和使用OUTPUT关键字关键字 12/24/202134修改和删除存储过程修改和删除存储过程l在在Microsoft SQL Server 2005系统中,可以使用系统中,可以使用ALTER PROCEDURE语句修改已经存在的存储过程。修改存储语句修改已经存在的存储过程。修改存储过程不同于删除和重建存储过程,其目的是保持存储过程过程不同于删除和重建存储过程,其目的是保持存储过程的权限不发生变化。的权限不发生变化。

24、l例如,如果修改例如,如果修改HumanResources.GetEmployeeInfo存存储过程,那么与该存储过程对象相关的权限将不会发生任储过程,那么与该存储过程对象相关的权限将不会发生任何变化。但是,如果删除何变化。但是,如果删除HumanResources.GetEmployeeInfo存储过程并且重新存储过程并且重新创建同名的存储过程,那么该存储过程对象相关的权限都创建同名的存储过程,那么该存储过程对象相关的权限都需要重新定义。需要重新定义。l如果数据库中某个存储过程不再需要了,可以使用如果数据库中某个存储过程不再需要了,可以使用DROP PROCEDURE语句删除该存储过程。这种

25、删除是永久性语句删除该存储过程。这种删除是永久性的,不能恢复。的,不能恢复。12/24/202135存储过程的执行过程存储过程的执行过程l存储过程创建之后,在第一次执行时需要经过语法分析阶存储过程创建之后,在第一次执行时需要经过语法分析阶段、解析阶段、编译阶段和执行阶段。段、解析阶段、编译阶段和执行阶段。l语法分析阶段是指创建存储过程时,系统检查其创建语句语法分析阶段是指创建存储过程时,系统检查其创建语句的语法正确性的过程。在存储过程的创建过程中如果碰到的语法正确性的过程。在存储过程的创建过程中如果碰到语法错误,那么该存储过程创建失败。如果语法检查通过语法错误,那么该存储过程创建失败。如果语法

26、检查通过之后,系统将该存储过程的名称存储在当前数据库的之后,系统将该存储过程的名称存储在当前数据库的sys.sql_modules目录视图中。目录视图中。l解析阶段是指某个存储过程首次执行时,查询处理器从解析阶段是指某个存储过程首次执行时,查询处理器从sys.sql_modules目录视图中读取该存储过程的文本并且目录视图中读取该存储过程的文本并且检查该过程引用的对象名称是否存在的过程。检查该过程引用的对象名称是否存在的过程。 l编译阶段是指分析存储过程和生成存储过程执行计划的过编译阶段是指分析存储过程和生成存储过程执行计划的过程。程。 l执行阶段是指执行驻留在过程高速缓冲存储区中的存储过执行

27、阶段是指执行驻留在过程高速缓冲存储区中的存储过程的执行计划的过程。程的执行计划的过程。 12/24/202136查看存储过程的信息查看存储过程的信息l在在Microsoft SQL Server 2005系统中,可系统中,可以使用系统存储过程和目录视图查看有关以使用系统存储过程和目录视图查看有关存储过程的信息。存储过程的信息。l如果希望查看存储过程的定义信息,那么如果希望查看存储过程的定义信息,那么可以使用可以使用sys.sql_modules目录视图、目录视图、OBJECT_DEFINITION元数据函数、元数据函数、sp_helptext系统存储过程等。系统存储过程等。12/24/2021

28、37【例【例10-12】查看存储过程信息】查看存储过程信息 12/24/202138本章内容本章内容10.1 视图视图10.2 存储过程存储过程10.3 触发器触发器10.4 用户定义函数用户定义函数10.5 上机练习上机练习10.6 习题习题12/24/20213910.3 触发器触发器lMicrosoft SQL Server 2005系统提供了两系统提供了两种强制业务逻辑和数据完整性的机制,即种强制业务逻辑和数据完整性的机制,即约束技术和触发器技术。约束技术和触发器技术。l前面已经讲过了约束技术,本节讲述触发前面已经讲过了约束技术,本节讲述触发器技术。器技术。12/24/202140触发

29、器类型触发器类型l按照触发事件的不同,可以把按照触发事件的不同,可以把Microsoft SQL Server 2005系统提供系统提供的触发器分成两大类型,即的触发器分成两大类型,即DML触发器和触发器和DDL触发器。需要补充的触发器。需要补充的是,是,DDL触发器是触发器是Microsoft SQL Server 2005系统新增的功能,以系统新增的功能,以前的版本只有前的版本只有DML触发器。触发器。l当数据库中发生数据操纵语言当数据库中发生数据操纵语言(data manipulation language,DML)事件时将调用事件时将调用DML触发器。触发器。DML事件包括在指定表或视

30、图中修改数事件包括在指定表或视图中修改数据的据的INSERT语句、语句、UPDATE语句或语句或DELETE语句。在语句。在DML触发器中,触发器中,可以执行查询其他表的操作,也可以包含更加复杂的可以执行查询其他表的操作,也可以包含更加复杂的Transact-SQL语句。语句。DML触发器将触发器本身和触发事件的语句作为可以在触发器触发器将触发器本身和触发事件的语句作为可以在触发器内回滚的单个事务对待。也就是说,当在执行触发器操作过程中,如内回滚的单个事务对待。也就是说,当在执行触发器操作过程中,如果检测到错误发生,则整个触发事件语句和触发器操作的事务自动回果检测到错误发生,则整个触发事件语句

31、和触发器操作的事务自动回滚。滚。lDDL触发器与触发器与DML触发器相同的是,都需要触发事件进行触发。但触发器相同的是,都需要触发事件进行触发。但是,是,DDL触发器的触发事件是数据定义语言触发器的触发事件是数据定义语言(data definition language,DDL)语句。语句。 12/24/202141DML触发器的基本类型触发器的基本类型l按照触发器事件类型的不同,可以把按照触发器事件类型的不同,可以把Microsoft SQL Server 2005系统系统DML触发触发器分成器分成3种类型,即种类型,即INSERT类型、类型、UPDATE类型和类型和DELETE类型。类型。

32、l这也是这也是DML触发器的基本类型。触发器的基本类型。12/24/202142创建创建DML触发器触发器lDML触发器是一种特殊类型的存储过程,所以触发器是一种特殊类型的存储过程,所以DML触发器的创建和存储过程的创建方式有很多触发器的创建和存储过程的创建方式有很多相似的地方。可以使用相似的地方。可以使用CREATE TRIGGER语句语句创建创建DML触发器。触发器。l在在CREATE TRIGGER语句中,指定了定义触发语句中,指定了定义触发器的基表或视图、触发事件的类型和触发的时间、器的基表或视图、触发事件的类型和触发的时间、触发器的所有指令等内容。触发器的所有指令等内容。l使用使用C

33、REATE TRIGGER语句创建语句创建DML触发器触发器12/24/202143CREATE TRIGGER语句语句lCREATE TRIGGER trigger_name lON table_name_or_view_name lWITH ENCRYPTIONl FOR | AFTER | INSTEAD OF DELETE , INSERT , UPDATE lAS sql_statement12/24/202144【例【例10-13】查看触发器信息】查看触发器信息 12/24/202145DML触发器的工作原理触发器的工作原理l前面介绍了前面介绍了DML触发器的基本概念、类型、触发器

34、的基本概念、类型、特点、创建、修改、删除等内容,现在我特点、创建、修改、删除等内容,现在我们来看看触发器是如何工作的。通过了解们来看看触发器是如何工作的。通过了解触发器的工作原理,就可以更好地使用触触发器的工作原理,就可以更好地使用触发器,写出效率更高的触发器。发器,写出效率更高的触发器。l下面主要介绍下面主要介绍INSERT、DELETE和和UPDATE类型触发器的工作原理。类型触发器的工作原理。12/24/202146INSERT触发器的工作原理触发器的工作原理l当向表中插入数据时,当向表中插入数据时,INSERT触发器触发触发器触发执行。当执行。当INSERT触发器触发时,新的记录触发器

35、触发时,新的记录增加到触发器表中和增加到触发器表中和inserted表中。表中。l该该inserted表是一个逻辑表,保存了所插表是一个逻辑表,保存了所插入记录的拷贝,允许用户参考入记录的拷贝,允许用户参考INSERT语句语句中数据。触发器可以检查中数据。触发器可以检查inserted表,来表,来确定该触发器的操作是否应该执行和如何确定该触发器的操作是否应该执行和如何执行。在执行。在inserted表中的那些记录,总是表中的那些记录,总是触发器表中一行或多行记录的冗余。触发器表中一行或多行记录的冗余。12/24/202147DELETE触发器的工作原理触发器的工作原理l当触发一个当触发一个DE

36、LETE触发器时,被删除的记录放在一个特触发器时,被删除的记录放在一个特殊的殊的deleted表中。表中。deleted表是一个逻辑表,用来保存已表是一个逻辑表,用来保存已经从表中删除的记录。该经从表中删除的记录。该deleted表允许参考原来的表允许参考原来的DELETE语句删除的已经记录在日志中的数据。当使用语句删除的已经记录在日志中的数据。当使用DELETE语句时,应该考虑下列一些因素:语句时,应该考虑下列一些因素:l当记录放在当记录放在deleted表中的时候,该记录就不会存在数据表中的时候,该记录就不会存在数据库的表中了。因此,在数据库表和库的表中了。因此,在数据库表和deleted

37、表之间没有共表之间没有共同的记录。同的记录。l逻辑表逻辑表deleted总是存放在内存中,以提供性能。总是存放在内存中,以提供性能。l在在DELETE触发器中,不能包括触发器中,不能包括TRUNCATE TABLE语句,语句,这是因为该语句是不记日志的操作。这是因为该语句是不记日志的操作。12/24/202148UPDATE触发器的工作原理触发器的工作原理l修改一条记录就等于插入一条新记录和删除一条修改一条记录就等于插入一条新记录和删除一条旧记录。同样,旧记录。同样,UPDATE语句也可以看成是由删语句也可以看成是由删除一条记录的除一条记录的DELETE语句和增加一条记录的语句和增加一条记录的

38、INSERT语句组成。当在某一个有语句组成。当在某一个有UPDATE触发触发器表的上面修改一条记录时,表中原来的记录移器表的上面修改一条记录时,表中原来的记录移动到动到deleted表中,修改过的记录插入到了表中,修改过的记录插入到了inserted表中。触发器可以检查表中。触发器可以检查deleted表和表和inserted表及被修改的表,以便确定是否修改了表及被修改的表,以便确定是否修改了多个行和应该如何执行触发器的操作。多个行和应该如何执行触发器的操作。12/24/202149一个具体的示例一个具体的示例l为了更加全面地掌握开发触发器的步骤和为了更加全面地掌握开发触发器的步骤和技术,本节

39、通过一个具体的示例,全面讲技术,本节通过一个具体的示例,全面讲述使用述使用Transact-SQL语言开发和创建触发语言开发和创建触发器的技术。器的技术。l一般地,开发触发器的过程包括用户需求一般地,开发触发器的过程包括用户需求分析、确定触发器的逻辑结构、编写触发分析、确定触发器的逻辑结构、编写触发器代码和测试触发器。器代码和测试触发器。12/24/202150【例【例10-14】设计和实现】设计和实现DML触发器触发器 12/24/202151创建创建t_accountData_insert触发器触发器 12/24/202152创建创建t_accountData_delete触发触发 12/

40、24/202153一组插入数据的操作一组插入数据的操作 12/24/202154审计到的插入数据的操作审计到的插入数据的操作 12/24/202155一组删除数据的操作一组删除数据的操作 12/24/202156审计到的删除数据的操作审计到的删除数据的操作 12/24/202157DDL触发器触发器lDDL触发器与触发器与DML触发器有许多类似的地触发器有许多类似的地方,如可以自动触发完成规定的操作、都方,如可以自动触发完成规定的操作、都可以使用可以使用CREATE TRIGGER语句创建等,语句创建等,但是也有一些不同的地方。但是也有一些不同的地方。l例如,例如,DDL触发器的触发事件主要是

41、触发器的触发事件主要是CREATE、ALTER、DROP以及以及GRANT、DENY及及REVOKE等语句,并且触发的时等语句,并且触发的时间条件只有间条件只有AFTER,没有,没有INSTEAD OF。12/24/202158【例【例10-15】使用】使用DDL触发器触发器 12/24/202159本章内容本章内容10.1 视图视图10.2 存储过程存储过程10.3 触发器触发器10.4 用户定义函数用户定义函数10.5 上机练习上机练习10.6 习题习题12/24/20216010.4 用户定义函数用户定义函数l在在Microsoft SQL Server 2005系统中,用系统中,用户定

42、义函数是接受参数、执行操作并且将户定义函数是接受参数、执行操作并且将运算结果以值的形式返回的例程。运算结果以值的形式返回的例程。l这种返回值既可以是单个标量值,也可以这种返回值既可以是单个标量值,也可以是一个结果集。是一个结果集。l在在Microsoft SQL Server 2005系统中,用系统中,用户定义函数既可以使用户定义函数既可以使用Transact-SQL语言语言编写,也可以使用任何编写,也可以使用任何.NET编程语言来编编程语言来编写。写。12/24/202161特点特点l在在Microsoft SQL Server 2005系统中,所有的用户定义函数都具有系统中,所有的用户定义

43、函数都具有相同的由两部分组成的结构:标题和正文。相同的由两部分组成的结构:标题和正文。l标题可以定义这些内容:具有可选架构标题可以定义这些内容:具有可选架构/所有者名称的函数名称;输所有者名称的函数名称;输入参数名称和数据类型;可以用于输入参数的选项;返回参数数据类入参数名称和数据类型;可以用于输入参数的选项;返回参数数据类型和可选名称;可以用于返回参数的选项等。型和可选名称;可以用于返回参数的选项等。l正文定义了函数将要执行的操作,这些操作既可以是一个或多个正文定义了函数将要执行的操作,这些操作既可以是一个或多个Transact-SQL语句,也可以是语句,也可以是.NET程序集的引用。程序集

44、的引用。l在在Microsoft SQL Server 2005系统中,用户定义函数又可以分为两系统中,用户定义函数又可以分为两大类,即用户定义标量函数和用户定义表值函数。用户定义标量函数大类,即用户定义标量函数和用户定义表值函数。用户定义标量函数返回在返回在RETURNS子句中定义的类型的单个数据值。对于多语句标量子句中定义的类型的单个数据值。对于多语句标量函数,定义在函数,定义在BEGIN END块中的函数体包含一系列返回单个值的块中的函数体包含一系列返回单个值的Transact-SQL语句。返回类型可以是除语句。返回类型可以是除text、ntext、image、cursor、timest

45、amp以外的任何数据类型。用户定义表值函数返回以外的任何数据类型。用户定义表值函数返回table数据类型。实际上,在表值函数中,表是单个数据类型。实际上,在表值函数中,表是单个SELECT语句的语句的结果集。结果集。12/24/202162创建时的考虑创建时的考虑l在在Microsoft SQL Server 2005系统中,可以分别使用系统中,可以分别使用CREATE FUNCTION、ALTER FUNCTION、DROP FUNCTION语句来实现用户定义函数的创建、修改和删除。语句来实现用户定义函数的创建、修改和删除。在创建用户定义函数时,每个完全限定用户函数的名称在创建用户定义函数时

46、,每个完全限定用户函数的名称(schema_name.function_name)必须唯一。必须唯一。l函数的函数的BEGIN END块中的语句不能有任何副作用。函数块中的语句不能有任何副作用。函数副作用是指对具有函数外作用域副作用是指对具有函数外作用域(例如修改数据库表例如修改数据库表)的资的资源状态的任何永久性更改。函数中的语句唯一能做的更改源状态的任何永久性更改。函数中的语句唯一能做的更改是对函数上的局部对象是对函数上的局部对象(如局部游标或局部变量如局部游标或局部变量)的更改。的更改。不能在函数中执行的操作包括对数据库表的修改、对不在不能在函数中执行的操作包括对数据库表的修改、对不在函数上的局部游标进行操作、发送电子邮件、尝试修改目函数上的局部游标进行操作、发送电子邮件、尝试修改目录,以及生成返回至用户的结果集。录,以及生成返回至用户的结果集。12/24/202163使用使用CREATE FUNCTION语句语句l在在Microsoft SQL S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论