版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第11章 数据库编程(二)主讲教师 毛一梅2010.012复习n一、T-SQL概述特点:综合统一、非过程化且面向集合、不同使用方式语法结构相同、易理解和掌握分类:数据定义语言DDL、数据操作语言DML、数据控制语言DCL和附加语言元素n二、T-SQL基础标识符(常规、分隔)、变量(局部、全局)、运算符(算术、赋值、字符串、比较、逻辑、位运算等)、函数(系统内置、用户定义)n三、T-SQL编程批处理(GO)、流程控制 (BEGINEND, IF,CASE,WHILE,WAITFOR)、错误捕获(TRYCATCH, ERROR )、注释(/*/,-)3四、事务编程n数据库系统的主要特点之一是实现
2、了数据共享,允许多个用户对数据进行同时访问。n当多个用户同时操作相同的数据时,如果不采取任何措施,则会造成数据异常。事务是为避免这些异常情况的发生而引入的一个概念。 41、什么是事务?n事务(Transaction)是用户定义的一个数据库操作的序列,这些操作要么全做要么全不做,绝不能值完成部分操作,而另一部分操作没有执行。n事务中任何一条语句执行时出错,事务都会返回到事务开始前的状态。一个事务中的所有操作是一个不可分割的逻辑工作单元。52、事务的ACID特性n原子性(Atomicity)n一致性(Consistency)n隔离性(Isolation)n持久性 (Durability)6(1)原
3、子性n事务必须是数据库的逻辑工作单元,也是工作的最小单位。n一个事务包括的所有操作是一个逻辑上不可分割的单位,其所进行的操作要么全都执行,要么全都不执行。7(2)一致性n事务执行的结果必须是使数据库从一个一致性状态转换到另一个一致性状态。n如果当数据库中只包括成功事务提交的结果时,数据库就处于一致性状态。n如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成的事务对数据库所做的修改有一部分已经写入物理数据库,这时数据库就处于一种不正确状态。n为了保证数据库处于一致性状态,所有的规则都必须应用于事务的修改,以保证所有数据的完整性和数据库的一致性。可见数据库的一致性和原子性是密不可
4、分的。8(3)隔离性n一个事务的执行不能被其他事务干扰。即一个事务内部的操作和使用的数据对其他并发事务是隔离的。n并发执行的各个事务之间不能相互干扰,即事务识别数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是其他事务修改它之后的状态,事务不会识别中间状态的数据。9(4)持久性n事务的持久性也称永久性,是指一个事务一旦提交,它对数据库中数据的改变就应该是永久的。接下来的其他操作或故障不应该对其执行结果有任何影响。103、事务模式、事务模式n自动提交事务n显式事务n隐式事务n批处理级事务11(1)自动提交事务n自动提交事务是系统默认的事务管理模式,它是指每条单独的Transact-
5、SQL语句都是一个事务,即在每条Transact-SQL语句成功执行后自动提交;如果遇到错误,则自动回滚该语句。12(2)显式事务n显式事务是指由用户可以用BEGIN TRANSACTION语句显式地定义事务开始和COMMIT语句或ROLLBACK语句显式地定义事务的结束。13(3)隐式事务n隐式事务是指在前一个事务完成(提交或回滚)时新事物隐式启动。但每个事务仍以COMMIT或ROLLBACK语句显式定义事务的结束来结束。14(4)批处理级事务n批处理级事务只能应用于多个活动结果集(ARS),在MARS会话中启动的T-SQL显式或隐式事务变为批处理级事务。n当批处理完成时没有提交或回滚的批处
6、理级事务自动由SQL Server进行回滚。 154、事务处理语句、事务处理语句nBEGIN TRANSACTIONnCOMMIT TRANSACTIONnROLLBACK TRANSACTIONnSAVE TRANSACTION16(1)BEGIN TRANSACTIONnBEGIN TRANSACTION语句定义一个显式事务的开始。其语法格式为:BEGIN TRANSACTION | TRAN transaction_name |tran_name_variable WITH MARK description n参数说明:transaction_name:指定显式定义事务的名称。tran_
7、name_variable:指定用户定义的、含有有效事务名的变量名,必须是CHAR、VARCHAR、NCHAR或N VARCHAR数据类型声明。description:指定在日志中标记事务的字符串。 17(2)COMMIT TRANSACTIONnCOMMIT TRANSACTION语句标志一个成功的显式事务或隐性事务的结束。提交当前事务,事务中所有数据的改变在数据库中都将永久有效。n语法格式:COMMIT TRAN | TRANSACTION transaction_name 18(3)ROLLBACK TRANSACTIONnROLLBACK TRANSACTION语句将显式事务或隐性事务
8、回滚到事务的起点或事务内的某个保存点。它也标志一个事务的结束。其语法格式为:ROLLBACK TRAN | TRANSACTION transaction_name | savepoint_name n参数说明:savepoint_name:指定检查点的名称。19(4)SAVE TRANSACTIONnSAVE TRANSACTION语句是在事务内设置保存点,它类似于C语言中GOTO语句的标号。其语法格式为:SAVE TRAN | TRANSACTION savepoint_name 20【例1】n定义一个事务score_ manager,将所有选修了课程号为00100002的学生的成绩都减少
9、5分,成功则提交事务,失败则取消事务。USE TeachingDataGOBEGIN TRAN score_managerUPDATE ScoreInfoSET Score = Score-5 WHERE CID = 00100002IF ERROR!=0 ROLLBACK TRAN score_managerELSE COMMIT TRAN score_manager21【例2】n定义一个事务stu_add,主要操作是向StuInfo表中添加一条学生记录,如果添加成功,设置保存点,然后再修改该生所在的院系,如果修改失败,回滚到事务的保存点,否则提交该事务。USE TeachingDataGO
10、BEGIN TRAN stu_addINSERT INTO StuInfo(SID,Sname,Sex,Dept,Major)VALUES(07011103,林敏, 女,管理科学与工程系,多媒体) ;IF ERROR!=0 ROLLBACK TRAN stu_addELSESAVE TRAN sp1;UPDATE StuInfoSET Dept = 计算机系 WHERE SID = 07011103;IF ERROR!=0ROLLBACK TRAN sp1ELSECOMMIT TRAN stu_add22n对上述代码的执行结果进行分析可知,如果在使用ROLLBACK TRANSACTION语句
11、时如果指定了检查点名称,则事务回滚到设置检查点的为位置;如果指定了事务名称,则回滚到该事务执行前的状态;如果没有指定事务名称或保存点名称,则将事务回滚到事务执行前,如果是嵌套事务时,则该语句将所有内层事务回滚到最外面的BEGIN TRANSACTION语句。23五、存储过程1、存储过程概述n存储过程(Stored Procedure)是一组完成特定功能的SQL语句的集合,经编译后存储在数据库中。用户通过指定存储过程的名称和参数来执行存储过程。 242、使用存储过程的优点:(1) 模块化程序设计存储过程只需创建一次并存储在数据库中,可被应用程序反复调用,用户可以独立于应用程序而对存储过程进行修改
12、。(2) 提高执行速度当执行Transact-SQL程序代码时,SQL Server必须先检查语法是否正确,接着进行编译、优化,然后再执行操作,因此每条SQL语句在执行前都要耗费一些时间。而在创建存储过程时要进行SQL语法的正确性检查、编译和优化,在执行存储过程时就无需再重复这些步骤。而且存储过程在第一次调用后就常驻内存,每次执行时不需要再将存储过程从磁盘调入内存,因此执行速度很快。25(3) 降低网络通信量如果建立了一个为完成某项操作而包括了数百行T-SQL语句的存储过程,客户端应用程序只需要通过网络向服务器发送一条存储过程名称和参数的调用语句,就可以让SQL Server执行存储过程中包括
13、的SQL语句并执行数据处理;否则,在客户端应用程序使用T-SQL语句完成的话,需要在网络中发送完成此项操作的数百行的代码。(4) 保证系统的安全性数据库系统管理员通过设置用户对存储过程的操作权限,从而实现对相应的数据访问权的限制,避免非授权用户对数据的访问。263、存储过程的类型n系统存储过程n用户自定义存储过程n扩展存储过程。 27(1) 系统存储过程n系统存储过程是在安装SQL Server 2005时自动创建的存储过程,主要用于管理SQL Server和显示有关数据库及用户的信息。n从物理意义上讲,系统存储过程主要存储在master数据库中,名称以“sp_”做前缀。从逻辑上看,系统存储过
14、程出现在每个系统定义的数据库和用户定义的数据库的sys构架中。n在SQL Server 2005中,可将GRANT、REVOKE和DENY权限应用于系统存储过程。28查看系统存储过程n通过SQL Server 2005中的SQL Server Management Studio管理器,在对象资源管理器下,逐级展开【服务器】/【数据库】/用户数据库(如TeachingData)/【可编程性】/【存储过程】/【系统存储过程】,单击【系统存储过程】节点可以看到系统提供的所有存储过程的列表。29(2) 用户自定义存储过程n用户自定义存储过程是由用户为完成某一特定功能自行创建并存储在用户数据库中的存储过
15、程。用户存储过程的名称在数据库中必须唯一,可以附带参数,完全由用户创建和维护。n在SQL Server 2005中,按编写语言的不同又将用户存储过程分为Transact-SQL存储过程和CLR存储过程。Transact-SQL存储过程是指保存的Transact-SQL语句的集合,可以接受和返回用户提供的参数;CLR存储过程是指对Microsoft.NET Framework Common Language Runtime(CLR)方法的一个引用,可以接受并返回用户所提供的参数。它们在.NET Framework程序集中是作为类的公共静态方法实现的。30注意:注意:n用户自定义存储过程的名称不要
16、以“sp_”开头,因为用户自定义存储过程与系统存储过程重名时,用户自定义存储过程永远不会被调用。31(3) 扩展存储过程n扩展存储过程允许使用外部程序设计语言(例如C语言)创建自己的外部例程,它可以由SQL Server 2005的实例动态加载和运行。以动态链接DLL的形式存在,直接在SQL Server实例地址空间中运行,可以使用SQL Server 2005扩展存储过程API完成编程。扩展存储过程是“xp_”开头。32说明:说明:n当初引入扩展存储过程的目的是为了通过外部程序语言来扩充SQL Server的功能和弥补T-SQL的不足。现在SQL Server 2005提供了完整的.NET
17、Framework CLR集成功能后,提供了更健全和安全的替代方案来编写扩展存储过程,因此扩展存储过程的使用在减少。33用户自定义存储过程与用户自定义函数比较n存储过程可以通过output参数来返回数据,而用户定义函数只可以接收参数,不能通过output类型的参数返回值。n在存储过程中可以对任何数据及对象进行修改,包括新建或删除数据表、修改数据库设置等,而在用户定义函数中只能对数据进行修改,不能对数据库对象进行修改。n用户定义函数可以返回除了text、ntext、image、cursor、timestamp类型外的其他所有数据类型,而存储过程只能返回整数值。n用户定义函数执行方式灵活,可以通过
18、execute方式执行,也可以用在表达式中,并以返回值的方式来取代函数名,而存储过程只能通过execute来执行。344、存储过程的创建n利用对象资源管理器创建n使用T-SQL创建35(1)利用对象资源管理器创建n在“对象资源管理器”中,逐级展开要创建存储过程的数据库/【可编程性】,右击【存储过程】,选择【新建存储过程】命令。n根据对存储过程的功能要求,在代码编辑窗口中输入代码n完成后单击【执行】按钮。 36【例3】n利用对象资源管理器在TeachingData数据库中创建一个显示“计算机系”学生的基本信息的存储过程。n操作步骤:在“对象资源管理器”中,逐级展开【数据库】/【TeachingD
19、ata】/【可编程性】,右击【存储过程】,选择【新建存储过程】 。输入命令:CREATE PROCEDURE Stu_ProcASSELECT * FROM StuInfo WHERE Dept=计算机系单击【SQL编辑器】工具栏中的【执行】按钮 37(2)使用T-SQL创建n语法格式如下:CREATE PROC | PROCEDURE procedure_name parameter data_type = default OUTPUT ,.n WITH RECOMPLIE | ENCRYPTION | RECOMPLIE,ENCRYPTION AS .n 38参数说明:nprocedure
20、_name:指定存储过程的名称,存储过程的名称必须唯一。nparameter:指定过程的输入和输出参数的名称,参数的名称必须以“”开头,且符合标识符的命名规则。ndata_type:指定参数的数据类型。ndefault:指定参数的默认值,它可以是一个常量或NULL。nOUTPUT:指定对应参数是一个输出参数。nRECOMPLIE:表明SQL Server不会缓冲该存储过程的执行计划,该过程将在执行时重新编译。nENCRYPTION:表明SQL Server对该存储过程的源代码加密,用sp_helptext系统存储过程无法查看。nsql_statement:指定在存储过程中需要执行的Transa
21、ct-SQL语句操作的集合。39【例4】n创建不带参数的存储过程。定义一个存储过程Sc_Proc,实现从ScoreInfo数据表中查询所有选修了00000001课程号的学生选课信息。USE TeachingDataGOCREATE PROCEDURE Sc_procASSELECT * FROM ScoreInfo WHERE CID=00000001GO405、存储过程的执行(1)在对象资源管理窗口中执行n在“对象资源管理器”窗口中,逐级展开【数据库】/【TeachingData】/【可编程性】/【存储过程】。n右击存储过程名,在弹出快捷菜单中选择【执行存储过程】选项,在打开的【执行过程】对
22、话框中,单击【确定】按钮,即可执行该存储过程。41(2)使用T-SQL调用语法格式:EXECUTE schema_name. procedure_name value,,nn参数说明:schema_name:指定存储过程所属架构的名称。procedure_name:指定调用存储过程的名称。value:指定传递给各输入参数的值。42【例5】n调用存储过程Sc_Proc,查询所有选修了00000001课程号的学生选课信息。EXECUTE Sc_Proc 43【例6】n创建一个存储过程Sc_Proc1,实现从ScoreInfo表中查询某个学生某门课程的成绩。通过调用存储过程查看具体的结果。USE T
23、eachingDataGOCREATE PROCEDURE Sc_proc1 (sid VARCHAR(8),cid VARCHAR(8)ASSELECT SID,CID,Score FROM ScoreInfo WHERE SID=sid AND CID=cidGO44执行存储过程的Sc_Proc1:n方法一:按位置传递参数值EXEC Sc_Proc1 05000001, 00100002n方法二:按参数名传递参数值EXEC Sc_Proc1 cid=00100002, sid=0500000145【例7】n创建输入参数带默认值的存储过程。定义一个用于向CourseInfo表中插入记录的存储
24、过程Add_proc,学分的默认值为3,课程类别默认为基础课。CREATE PROC Add_proc(cid CHAR(8),cname CHAR(20),ccredit TINYINT=3,cproperty CHAR(10)=基础课)ASINSERT INTO CourseInfo VALUES(cid,cname,ccredit,cproperty)46执行存储过程的Add_proc:n无缺省值的调用n缺省cproperty参数的调用n缺省ccredit参数的调用47无缺省值的调用n调用该存储过程插入一条课程号为00000004、课程名为大学计算机基础、学分为4课程记录,使用按位置传递
25、参数值和按参数名传递参数值的调用语句均可。EXEC Add_proc 00000004,大学计算机基础大学计算机基础,4,基础课基础课n另外一种传递参数的方法是采用“参数=值”的形式,此时各个参数的顺序可以任意排列。例如上例也可以这样执行:EXEC Add_proc cid= 00000006, ccredit =3, cproperty=专业基础课专业基础课,cname=企业管理企业管理48缺省cproperty参数的调用n调用该存储过程插入一条课程号为00000005、课程名为大学体育,2学分。调用语句为:EXEC Add_proc 00000005,大学体育大学体育, 2n或EXEC A
26、dd_proc cid= 00000005, cname=大学体育, ccredit =2打开表CourseInfo可以看到在调用存储过程时,没有指定参数值时就自动使用相应的默认值,即这里的CProperty自动设为默认值“基础课”。49缺省ccredit参数的调用n调用该存储过程插入一条课程号为00211003、课程名为软件工程,专业课。调用语句为:EXEC Add_proc cid= 00211003, cname=软件工程, cproperty=专业课n由于该调用缺省的中间参数,只能使用“参数=值”形式进行参数传递。50【例8】n创建带输出参数的存储过程。定义一个存储过程GetCredi
27、t_proc,实现从CourseInfo数据表中返回某门课程的学分。CREATE PROC GetCredit_proc (cid VARCHAR(8), ccredit TINYINT OUTPUT)ASSELECT ccredit = Ccredit FROM CourseInfoWHERE CID =cidGOn在该例中cid为输入参数,用于传入课程号;ccredit为输出参数,用于返回学分,请注意其后面的OUTPUT表明此参数为输出参数。51n执行该存储过程,来查询课程号CID为“00200002”的课程学分:DECLARE xf INTEXEC GetCredit_proc 0020
28、0002, xf OUTPUTPRINT xf526、存储过程的修改(1)在对象资源管理器中修改n在“对象资源管理器”窗口中,逐级展开【数据库】/数据库名(如“TeachingData”)/【可编程性】/【存储过程】。 n在存储过程列表中,右击要修改的存储过程名,在弹出的快捷菜单中选择【修改】选项,在SQL命令窗口中编辑T-SQL代码。n完成编辑后,单击标准工具栏中的命令按钮 53(2)用T-SQL命令修改语法格式:ALTER PROC | PROCEDURE procedure_name parameter data_type = default OUT PUT ,.n WITH RECOM
29、PLIE | ENCRYPTION | RECOMPLIE,ENCRYPTION AS .n 注意:注意:n如果存储过程在创建时使用 WITH ENCRYPTION 或 WITH RECOMPILE等选项,那么只有在 ALTER PROCEDURE 中也包含这些选项时,这些选项才有效。54六、触发器1、什么是触发器?n触发器是数据库服务器中发生事件时自动执行的一种特殊的存储过程,为数据库提供了有效的监控和处理机制,确保了数据的完整性。n触发器基于一个表创建,但可以针对多个表进行操作,所以触发器常被用来实现复杂的商业规则。n在SQL Server中,一张表可以有多个触发器,用户可以根据数据操作语
30、句对触发器进行设置。552、触发器的优点:强化完整性约束。触发器能够实现比CHECK 语句更为复杂的约束。与CHECK相比,触发器可以引用其它表中的列,更适合在大型数据库管理系统中用来约束数据的完整性。实现表的级联操作。触发器可以侦测数据库内的操作,并自动的级联影响整个数据库的各项内容。可以禁止和回滚违反完整性约束的更改。触发器可以侦测数据库内的操作,从而可以取消数据库未经许可的更新操作,并返回自定义的错误信息。使数据库的修改、更新操作更安全,数据库的运行也更稳定。563、触发器的类型nSQL Server 2005 提供了两种类型的触发器:DML触发器DDL触发器57(1)DML触发器nDM
31、L触发器是在执行数据操作语句(DML)时被执行的触发器。nDML事件包括指定表或者视图中修改数据的INSERT语句、UPDATE语句和DELETE语句。nDML触发器中可以查询其他表,可以包含复杂的Transact-SQL语句。n可以将触发器和触发它的语句作为作为整体被看作一个事务,如果检测到错误时,整个事务即自动回滚。58DML触发器根据操作事件的不同可以分为以下两种类型: AFTER触发器 INSERTED OF触发器59 AFTER触发器nAFTER触发器是在执行了INSERT、UPDATE和DELETE语句操作之后才执行的触发器。n该触发器要求只有执行某一操作之后,触发器才被触发,且只
32、能在表上定义。n可以针对表的同一操作定义多个触发器,还可以使用系统存储过程sp_settriggerorder定义触发器触发的顺序。60 INSERTED OF触发器nINSERTED OF触发器是在触发事件发生前被调用,即INSERTED OF触发器执行时并不执行其发出触发事件的操作语句(INSERT、UPDATE或DELETE),而仅仅是执行触发器中的语句。n可为带有一个或多个基表的视图定义INSERTED OF触发器,而这些触发器能够扩展视图可支持的更新类型。61(2) DDL触发器nDDL 触发器是SQL Server 2005的新增功能,也是一种特殊的存储过程,它与DML中AFTER
33、触发器类似。当服务器或数据库中发生数据定义语言(DDL)事件时将调用这些触发器。n与DML不同的是,它相应的触发事件是由数据定义语句CREATE、ALTER或DROP操作引发的。DDL触发器通常用于执行数据库的管理任务,如调节和审计数据库运转等。n由于DDL触发器是SQL Server 2005引入的新概念,主要应用于数据审计等工作,不属于数据库基本使用范围, 624、DML触发器的创建在创建触发器前需要注意以下几个问题:CREATE TRIGGER语句必须是批处理的第一个语句,并且只能应用在一张表上。创建触发器的权限默认分配给表的所有者,且不能把该权限传给其它用户。触发器只能在当前的数据库中
34、创建,但是可以引用当前数据库的外部对象。在同一条 CREATE TRIGGER 语句中,可以为多种用户操作(如 INSERT 和 UPDATE)定义相同的触发器操作。如果一个表的外码设置为DELETE/UPDATE的级联操作,则不能再为该表定义 INSTEAD OF DELETE/UPDATE 触发器。在DML触发器中不允许使用的T-SQL语句有:CREATE DATABASE、ALTER DATABASE、DROP DATABASE、LOAD DATABASE、LOAD LOG、RECONFIGURE、RESTORE DATABASE、RESTORE LOG。63(1)使用对象资源管理器创建
35、)使用对象资源管理器创建DML触触发器发器 n若在TeachingData数据库的StuInfo表中创建一个触发器Stu_t1,旨在进行INSERT操作时给出提示信息。操作步骤:在“对象资源管理器”窗口中,逐级展开【数据库】/【TeachingData】/【表】/【StuInfo表】,右击【触发器】,选择【新建触发器】。在代码编辑窗口中的相应位置填入创建触发器的T-SQL语句。Stu_t1代码如下:CREATE TRIGGER Stu_t1ON StuInfoFOR INSERTASPRINT 欢迎新同学! 单击工具栏上的【执行】按钮。64(2)用)用T-SQL语句创建语句创建DML触触发器发
36、器 n语法格式如下:CREATE TRIGGER trigger_name ON table | view WITH ENCRYPTION FOR | AFTER | INSTEAD OF INSERT , UPDATE , DELETE AS IF UPDATE(column) AND | OR UPDATE(column)sql_statements65参数说明:ntrigger_name:指定触发器的名字,其名字在当前数据库中必须是惟一,不能以#或#开头。ntable| view:执行DML触发器的表或视图,若是视图只能被INSTEAD OF触发器引用。nWITH ENCRYPTION:
37、表示对包含有CREATE TRIGGER 文本的syscomments 表进行加密;nFOR | AFTER | INSTEAD OF :指定触发器的类型,FOR和AFTER等价。nDELETE , INSERT , UPDATE:指定激活触发器的数据操作,至少要指明一个选项。在触发器的定义中,三者的顺序不受限制,且各选项要用逗号隔开。nsql_statement:指定触发器被触发后将执行的操作,它包括触发器执行的条件和动作。触发器条件是指除了引起触发器执行的操作外的附加条件;触发器动作是指当用户执行激发触发器的某种操作并满足触发器的附加条件时,触发器所执行的操作。nIF UPDATE(col
38、umn):指定对表内某列增加或修改内容时触发器才起作用,它可以指定两个以上的列。66【例9】n为数据表StuInfo创建一个触发器Stu_t2,实现在更新操作中禁止修改学生姓名。CREATE TRIGGER Stu_t2 on StuInfo FOR UPDATE AS IF UPDATE(Sname) BEGIN PRINT 学生姓名不允许修改! ROLLBACK END 67【例10】n创建一个触发器Tch_t1,实现禁止删除或更改工号为11010001的教师。CREATE TRIGGER Tea_t1ON tchinfoFOR UPDATE,DELETEAS IF (SELECT TID
39、 FROM Deleted)=11010001) BEGIN PRINT 不允许删除该教师,操作失败! ROLLBACK END68DM触发器的工作原理触发器的工作原理n两个特殊的临时表,即Inserted表和Deleted表。这两个表是在DML触发器执行时产生的临时表,驻留在内存中,它的结构和触发器所在的表的结构相同,由SQL Server 2005自动创建和管理这些表。用户可以使用这两个表中的数据,但不能直接对表中的数据进行修改。(1)Inserted表nInserted表用于存储被INSERT和UPDATE语句操作所影响的新数据行的副本。n在INSERT操作或UPDATE操作时,新的数据
40、行被添加到基本表中,同时这些数据行的副本被添加到Inserted临时表中。(2)Deleted表nDeleted表用于存储被DELETE和UPDATE语句操作所影响的旧数据行。n在执行DELETE或UPDATE操作时,指定的数据行从基本表中删除,并转移到Deleted表中。在基本表和Deleted表中一般不会出现相同的行。69nInserted表和Deleted表存在于内存中,仅仅在触发器执行时存在,它们在某一特定时间和某一特定表相关。一旦某个触发器结束执行,相应的两个表内的数据都会消失。如果想将这些表内数据的永久保存,需要在触发器把这些表中的数据复制到一个永久表中。在对具有触发器的表进行操作
41、时,其执行过程如下:执行INSERT操作时,插入到触发器表中的新行也被插入到Inserted表中。执行DELETE操作时,从触发器表中删除的行被插入到Deleted表中。执行UPDATE操作时,先从触发器表中删除旧行,然后再插入新行。其中删除的旧行被插入到Deleted表中,插入的新行插入到Inserted表中。在设置触发器条件时,应使用激发触发器的操作相应的Inserted或Deleted表。尽管在测试INSERT时引用删除的表或在测试DELETE时引用插入的表不会导致任何错误,但在这些情况下,这些触发器测试表将不包含任何行。705、创建、创建DDL触发器触发器nDDL触发器与标准触发器一样
42、,在响应事件时执行存储过程。n与标准触发器不同的是,它们并不响应对表或者视图的UPDATE、INSERT或者DELETE语句时执行存储过程。它们主要在响应数据定义语言(DDL)语句时执行存储过程,主要包括CREATE、ALTER、DROP、GRANT、DENY、REVOKE等语句。n它可以用于在数据库中执行管理任务。71语法格式:CREATE TRIGGER trigger_name ON ALL SERVER | DATABASE WITH ENCRYPTION FOR | AFTER event_type|event_group , .nAS sql_statements , .n72参数
43、说明:ntrigger_name:指定DDL触发器的名称。nALL SERVER:将DDL或登录触发器的的作用域应用当前服务器。nDATABASE:将DDL触发器的的作用域应用当前数据库。nevent_type:执行之后将导致激发DDL触发器的Transact-SQL语言事件的名称。 nevent_group:预定义的Transact-SQL语言事件分组的名称。nsql_statements:触发后的判断条件和操作。73【例11】n创建DDL触发器DB_tr,其功能为:当数据库中发生DROP TABLE事件或ALTER TABLE事件都将触发DDL触发器。CREATE TRIGGER DB_t
44、r ON DATABASE FOR DROP_TABLE,ALTER_TABLE AS PRINT无法删除或修改本数据库中的表! ROLLBACK GO74【例12】n创建一个触发器Cou_t1,当向CourseInfo表插入课程记录时,先检查是否与该课程同名的课程已经存在,以避免课程的混淆。CREATE TRIGGER Cou_t1ON CourseInfoFOR INSERT,UPDATEASIF (SELECT COUNT(Cname) FROM Inserted WHERE Cname IN (SELECT Cname FROM CourseInfo )1 BEGIN PRINT(已经
45、有同名课程存在,不能插入或修改!) ROLLBACK ENDGO756、触发器的管理(1)在“对象资源管理器”窗口中管理触发器n逐级展开“对象资源管理器”窗口中的【数据库】/【TeachingData】/【表】/【StuInfo表】/【触发器】。 n右击要查看的触发器(如Stu_t1):选择【查看依赖关系】选项,则显示依赖该触发器的对象和该触发器依赖的其他数据库对象的名称。选择【修改】选项,在右窗格中显示要修改的触发器的代码,用户可以直接修改该触发器的T-SQL语句。最后单击【执行】按钮,可以执行修改后的触发器。选择【删除】选项,在弹出的【删除对象】对话框中显示了当前要删除触发器的相关信息,如
46、果确认删除,则单击【确定】按钮,系统将删除触发器。 76(2)利用T-SQL命令管理触发器n查看触发器SQL Server2005使用系统存储过程sp_help、sp_helptext和sp_depends和系统表sysobjects浏览触发器的相关信息,也可以使用sp_rename系统存储过程来为触发器更名。77sp_helpn系统存储过程sp_help用于查看触发器的名称等一般信息,其语法格式为:nEXEC sp_help trigger_name78sp_helptextn系统存储过程sp_helptext用于查看触发器的正文信息,其语法格式为:EXEC sp_helptext trig
47、ger_name 79sp_dependsn系统存储过程sp_ depends用于查看触发器所引用的表或指定表涉及的所有触发器。其语法格式为:EXEC sp_depends trigger_name n或者:EXEC sp_ depends table_name80使用系统表sysobjectsUSE TeachingDataSELECT * FROM sysobjectsWHERE type=TR81使用ALTER TRIGGER语句修改触发器n语法格式:ALTER TRIGGER trigger_name ON ( table | view ) WITH ENCRYPTION ( FOR | AFTER | INSTEAD OF ) DELETE , INSERT , UPD
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026台州临海市市属国有企业招聘工作人员49人备考题库附答案详解ab卷
- 2026四川绵阳市盐亭国有投资管理有限公司招聘管理岗位和业务岗位10人备考题库及答案详解(必刷)
- 2026江苏省交通技师学院招聘高层次人才4人备考题库含答案详解(黄金题型)
- 多学科诊疗团队会诊工作制度
- 患者满意度调查结果分析整改报告
- 2026中国电极糊市场盈利预测分析及竞争风险研究研究报告
- 2025-2030钢化玻璃行业市场供需动态与发展技术改进研究
- 2025-2030针对服饰行业市场发展现状分析消费趋势投资评估规划布局研究报告
- 2025-2030造船行业市场现状综合技术升级全球海运政策环保要求及投资发展报告
- 2025-2030轨道交通领域市场分析及技术突破与行业发展潜力研究报告
- 罗湖法院执行异议申请书
- 农学课件教学课件
- 安全工器具考试题及答案
- 腰线拆除施工方案(3篇)
- 摩托协议过户协议书模板
- 门店2人合伙合同范本
- 血站院感培训课件
- 知道智慧树工程制图(中国石油大学(华东))课后章节测试满分答案满分测试答案
- 2025年浙江事业单位招聘考试综合类专业能力测试试卷(工程类)试题
- 电商直播情境下消费者冲动购买行为研究
- 智慧养老系统讲解课件
评论
0/150
提交评论