存储过程和触发器_第1页
存储过程和触发器_第2页
存储过程和触发器_第3页
存储过程和触发器_第4页
存储过程和触发器_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、第10章存储过程和触发器【学习目标】本章将要学习存储过程和触发器的基本概念、作用和基本操作。本章学习要点:存储过程的概念、作用、分类;存储过程的创建、查看、修改和执行;触发器的主要作用、类型;inserted 表和deleted表的作用和使用; 触发器的创建方法、查看、修改和执行。【学习导航】存储过程(Store Procedure )和触发器(Trigger )是SQL Server数据库系统重要的数据库对 象,在以SQL Server 2005 为后台数据库创建的应用程序中具有重要的应用价值。本章主要内容见图10-1所示的学习导航。图10-1本章内容学习导航查看修改特殊表修改启用了解存储过

2、程的特点和优点以及存储过程的分类.10.1存储过程概述掌握使用SSMS管理器、T-SL管句实现创建、执行、查看、修改 和删除存储过程等册基本操作.Transact-SQL语言是应用程序与SQL Server数据库之间的主要编程接口,大量的时间将花费在Transact-SQL语句和应用程序代码上。在很多情况下,许多代码被重复使用多次,每次都输入相同的 代码不但繁琐,更由于在客户机上的大量命令语句逐条向SQL Server发送,将降低系统运行效率。因此,SQLServer提供了一种方法,它将一些固定的操作集中起来由SQLServer数据库服务器来完成,应用程序只需调用它的名称,就可实现某个特定任务

3、,这种方法就是存储过程。下面将详细介绍存储过程的概念、特点、创建、执行等内容。10.1.1 存储过程的概念SQL SERVER中T-SQL语言为了实现特定任务而将一些需要多次调用的固定的操作编写成子程序 并集中以一个存储单元的形式存储在服务器上,由SQL Server数据库服务器通过子程序名来调用它们,这些子程序就是存储过程。 存储过程是一种数据库对象,存储在数据库内,可由应用程序通过一个调用执行, 而且允许用户 声明变量、有条件执行,具有很强的编程功能。存储过程可以使用EXECUTED句来运行。在 SQL Server 中使用存储过程而不使用存储在客户端计算机本地的T-SQL 程序有以下几个

4、方面的好处。(1)加快系统运行速度。存储过程只在创建时进行编译,以后每次执行存储过程都不需再重新 编译,而一般SQL语句每执行依次就编译一次,所以使用存储过程可提高数据库执行速度。( 2)封装复杂操作。 当对数据库进行复杂操作时 (如对多个表进行 Update Insert , Query , Delete 时),可用存储过程将此复杂操作封装起来与数据库提供的事务处理结合一起使用。(3)实现代码重用。可以实现模块化程序设计,存储过程一旦创建,以后即可在程序中调用任 意多次,这可以改进应用程序的可维护性,并允许应用程序统一访问数据库。(4)增强安全性。可设定特定用户具有对指定存储过程的执行权限而

5、不具备直接对存储过程中引用的对象具有权限; 可以强制应用程序的安全性;参数化存储过程有助于保护应用程序不受SQL注入式攻击。( 5)减少网络流量。 因为存储过程存储在服务器上, 并在服务器上运行。 一个需要数百行 T-SQL 代码的操作可以通过一条执行过程代码的语句来执行;而不需要在网络中发送数百行代码, 这样就可以减少网络流量。10.1.2 存储过程的分类在 SQL Server 2005 中存储过程可以分为两类:系统存储过程和用户存储过程。1系统存储过程系统存储过程是由 SQL Server 系统提供的存储过程,可以作为命令执行各种操作。系统存储过程主要用来从系统表中获取信息 ,为系统管理

6、员管理 SQL Server 提供帮助 ,为用户查 看数据库对象提供方便。例如,执行 sp_helptext 系统存储过程可以显示规则、默认值、未加密的存 储过程、用户函数、触发器或视图的文本信息;执行 sp_depends 系统存储过程可以显示有关数据库 对象相关性的信息;执行 sp_rename 系统存储过程可以更改当前数据库中用户创建对象的名称。SQLServer 中许多管理工作是通过执行系统存储过程来完成的,许多系统信息也可以通过执行系统存储 过程而获得。系统存储过程定义在系统数据库master中,其前缀是sp_。在调用时不必在存储过程前加上数据库名。有关系统存储过程的详细介绍请参考

7、SQL Server 联机丛书。除了以sp_为前缀的系统存储过程,我们还常见到以xp_为前缀的存储过程,这种存储过程为扩展存储过程。扩展存储过程主要用于扩展 SQL Server 的功能。2用户存储过程 用户存储过程是指用户根据自身需要,为完成某一特定功能,在用户数据库中创建的存储过程。 用户创建存储过程时,存储过程名的前面加上“#”,是表示创建全局临时存储过程;在存储过程名的前面加上“ #”,是表示创建局部临时存储过程。局部临时存储过程只能在创建它的会话中可用, 当前会话结束时除去;全局临时存储过程可以在所有会话中使用,即所有用户均可以访问该过程。它 们都保存在 tempdb 数据库中。10

8、.1.3存储过程的创建与管理在SQL Server 2005 中通常可以使用两种方法创建存储过程:一种是使用图形化管理工具SQLServer Man ageme nt Studio 创建存储过程;另一种是使用 T-SQL语句创建存储过程。创建存储过程时,需要注意下列事项:只能在当前数据库中创建存储过程。 创建存储过程时,应指定所有输入参数和向调用过程或批处理返回的输出参数、执行数据库 操作的编程语句和返回至调用过程或批处理以表明成功或失败的状态值。在用户存储过程的定义中不能使用下列对象创建语句:CREATB/IEW CREATBDEFAULTCREATERULE CREATE PROCEDUR

9、CREATE TRIGGER即在存储过程的创建中不能嵌套创建以上这些 对象。存储过程创建后,可以使用 EXECUT语句来执行(可以简写为 EXEC,如果它是一个批处理中的 第一条语句,则关键字 EXECUTE;或EXEC也可省略。10.1.4 使用SSMS创建和执行存储过程【案例10-1】执行系统存储过程sp_help查看教务管理数据库stu中class表的信息。 程序清单:use stu go exec sp_help class运行以上程序,结果如图10-2所示。图10-2执行系统存储过程 sp_help查看class表信息【案例10-2】在数据库stu中,创建一个名称为“stu_soft

10、js ”的存储过程,通过该存储过程可查询出软件工程系所有教授的信息。操作步骤如下:(1) 启动SQLServer Management Studio,在【对象资源管理器】窗口中,依次展开【数据库】 stu】t【可编程性】节点。(2 )右键单击【存储过程】节点,选择【新建存储过程】命令,打开【创建存储过程模版】文 档窗口,如图10-3所示。(3) 用户在模版文档窗口中根据相应提示输入存储过程名称和T-SQL语句。创建存储过程 “ stu_softjs ”,如图 10-4 所示。(4) 单击【执行】按钮,完成存储过程的创建。【提示】-在模板文档窗口中可以把不必要的参数去掉。在第(2)步骤右键单击“

11、存储过程”节点,选择“刷新”,即可看到刚刚创建好的存储过程。图10-3【创建存储过程模版】文档窗口图10-4创建存储过程“ stu_softjs ”【案例10-3】使用SSMS执行上面例子中创建的存储过程“stu_softjs ”。启动SQLServer Management Studio,在【对象资源管理器】 中依次展开【数据库】宀【student】 t【可编程性】t【存储过程】节点。右键单击【stu_softjs】存储过程,选择【执行存储过程】命令,如图 10-5所示。 打开【执行过程】对话框,再单击【确定】按钮即可。XMGqxxslC (SQL Server 9.0.1399- -.J数

12、露庠Q .杲卿据库田i_J數詰库快用Id j stuQ丄数据库羌萦閨 L表 习视匡1 口同义运1 Fl ij可编理性-j存惜过程田施鎭型蜃Q .脱严* 土 L函數 . _J数直库i 3 程序集 田二3賞塑 规则 田丄默认佰t,Stfwlte Brd lj存體 田安全性S) j 血dent 2J亠 ,dbo._名秫新建存14过程迥)亠 修改茁1对茹费悲甘理言T4 X I要1底按奶据曲TJ Y图10-5选择【执行存储过程】命令10.1.5 使用SSMS查看、修改和删除存储过程【案例10-4】使用SSMS查看上例中创建的存储过程“stu_softjs ”的属性。(1)在如图10-5所示的右键菜单中,

13、选择【属性】菜单,打开【存储过程属性】对话框。(2)选择【常规】选项卡:可以查看到该存储过程属于哪个数据库、创建如期和属于男个数据 库用户等信息。(3)选择【权限】选项卡:可以为该存储过程添加用户并授予其权限。(4)选择【扩展属性】选项卡:可以了解排序规则等扩展属性。【提示】在如图10-4所示的右键菜单中,选择“删除”菜单命令可以删除指定的存储过程;选择“修改”命令进入存储 过程文本修改状态,可对存储过程进行修改;选择“重命名”可以实现存储过程的名称的更改。10.1.6 使用T-SQL语句创建和执行存储过程1. 创建存储过程使用T-SQL语句CREATE PRO可以创建存储过程,其基本语句格式

14、如下所示。CREATE PROCEDURE存 储过程名参数1 数据类型=默认值OUTPUT ,. nWHTI ENCRYPTION RECOMPILEASSQL语句参数含义:存储过程名:要符合标识符规则,少于128个字符。参数:过程中的参数。在 CREATE PROCEDURE中可以声明一个或多个参数。OUTPUT表明该参数是一个返回参数。AS:用于指定该存储过程要执行的操作。SQL语句:是存储过程中要包含的任意数目和类型的T-SQL语句。ENCRYPTION用于加密存储过程文本。本加密的存储过程,其图标上有“加锁”标志, 其定义内容不可修改,也不可通过系统存储过程 sp_helptext 查

15、看。RECOMPILE设置该选项后,存储过程将在运行时重新编译。【案例10-5】在“ stu ”数据库中,创建一个存储过程“stu_softxs ” ,通过该存储过程可以查询软件技术专业的学生信息。(1) 在“查询编辑器”窗口中输入如下代码:USE stuGOCREATE PROC stu_softxsASSelect *From studentWhere s_classid in(SELECT c_id FROM classWHERE sp_id in(SELECT sp_idFROM specialityWHERE sp_name= 软件技术 )GO(2) 单击“分析”按钮,进行语法检查;

16、再单击“执行”按钮,创建存储过程。2. 执行存储过程执行存储过程的基本语句格式:EXEC procedure_name Value_List参数含义 : procedure_name :要执行的存储过程的名称。 Value_List :输入参数值。【案例 10-6 】 执行以上存储过程“ stu_softxs ”。代码如下 :USE STUGOEXEC stu_softxsGO执行以上代码,结果如图 10-6 所示。图10-6执行存储过程“ stu_softxs ”结果10.1.7 创建和执行带参数的存储过程带参数的存储过程可以扩展存储过程的功能。使用输入参数,可以将外部信息输入到存储过程;

17、使用输出参数,可以将存储过程内的信息转到外部。创建带参数的存储过程时,参数可以是一个,也 可以是多个,多个参数时,参数之间用逗号分隔。所有数据类型均可以作为存储过程的参数,一般情 况下,参数的数据类型要与它相关的字段的数据类型一致。1. 带有输入参数的存储过程【案例10-7】在“ stu ”数据库中,创建存储过程“stu_zymc ” ,该存储过程带有一个用于接收用户输入专业名称的输入参数。该存储过程要求被执行时,它将根据用户输入的专业名称列出该专业的所有班级信息。代码如下:CREATE PROC stu_zymc zymc varchar(20)/*变量参数的数据类型与长度都要和表中相关字段

18、的定义一致*/ASSELECT * FROM classWHERE spd in(SELECT sp_idFROM specialityWHERE sp_name=zymc)GO执行该存储过程“ stu_zymc ”,代码如下:Use stuGoEXEC stu_zymc软件技术go执行结果如图10-7所示。【提示】执行带参数的存储过程,有两种方式。按位置转递。在调用存储过程时,直接给出参数值。如果多于一个参数,给出的参数值要与定义的参数顺序 致。例如:EXEC stu_zymc软件技术。使用参数名称转递。在调用存储过程时,按“参数名=参数值”的形式给岀参数值。采用此方式,参数如果多于一个时,

19、给岀的参数顺序可以与定义的参数的顺序不一致。例如:EXEC stu_zymc zym软件技术。图10-7执行存储过程显示出相应专业的班级信息2. 带有参数默认值的存储过程【案例10-8】如果要求上例中创建的存储过程stu_zymc在被执行时不给出参数值将默认显示软件技术专业的班级信息,则创建该存储过程的代码为:/*变量参数的默认值是“软件技术”专业*/CREATE PROC stu_zymc zymc varchar(20)= 软件技术ASSELECT * FROM classWHERE sp_id in(SELECT sp_idFROM specialityWHERE sp_name=zym

20、c)GO不带参数值执行该存储过程,代码:EXEC stu_zymc3. 带有输出参数的存储过程输出参数用于在存储过程中返回值,使用OUTPUT明输出参数。【案例10-9】在stu数据库中,创建一个带有输出参数的存储过程stu_xspjf,其中输出参数用于返回学号为0501010102的学生的平均成绩。创建该存储过程代码:USE stuGO/*输岀参数的数据类型要与它接收的值的类型一致*/create proc stu_xspjf xspjf tinyint outputasselect xspjf=avg(sc_grade)from stucourse where s_num=05010101

21、02go执行该存储过程并输出显示的代码如下,执行结果如图10-8所示。use stugodeclare avg tinyintexec stu_xspjf avg outputprint 学号为 0501010102 的同学的平均分为:+ltrim(str(avg)+ 分【提示】执行带有输出参数的存储过程时,需要声明变量来接收存储过程中由输出参数返回来的返回值。一般情况下,声 明的变量的数据类型要与存储过程的输岀参数的数据类型一致。在使用该变量时,还必须为它加上OUTPU声明。图10-8执行带有输岀参数的存储过程并输岀显示信息10.1.8 使用T-SQL语句查看、修改和删除存储过程1使用SSM

22、S查看、修改和删除存储过程请参阅【案例10-4】、【提示】和图10-5。2.使用系统存储过程查看存储过程信息(1)使用sp_help查看存储过程的一般信息,包含存储过程的名称、拥有者、类型和创建时间,其语法格式为:Exec Sp_help 存储过程名(2)使用sp_helptext查看存储过程的定义信息,其语法格式为:Exec Sp_helptext 存储过程名【案例10-10】分别使用系统存储过程sp_help和sp_helptext 查看stu数据库中的存储过程“ stu_xspjf ”的定义、相关性及一般信息。代码如下,结果如图10-9所示。USE stuGOEXEC sp_help s

23、tu_xspjfEXEC sp_helptext stu_xspjfGO图10-9使用系统存储过程查看存储过程信息3. 使用语句修改存储过程使用 ALTER PROCEDURE句可以更改先前通过执行CREATE PROCEDURE句创建的过程, ALTERPROCEDURE本语句格式如下。ALTER PROCEDURE存储过程名参数1 数据类型=默认值OUTPUT,參数n 数据类型=默认值OUTPUTASSQL语句各参数含义与 CREATE PROCDU语句相同,只是把创建时的CREATE改为了 ALTER。因为修改和创建时的过程方法一样,在这里不再另外举例说明。4. 使用语句删除存储过程当存

24、储过程没有存在的意义时,可以使用DROP PROCEDURE句将其删除。用于删除存储过程的基本语句格式:DROP PROCEDURES过程名,n【案例10-11】删除“ stu ”数据库中的存储过程“ stu_xspjf ”。代码如下:USE stuGODROP PROCEDURE stu_xspjfGO10.2触发器概述LJ了解触发器的作用、类型、inserted表和deleted表的作用口L.J:曲4 :拿握使用T-SQL语句、SSMS管理器创崖、执行、查看、修改、禁 用和启用、删除触发器.X/10.2.1 触发器的概念1. 触发器的作用触发器是一种特殊类型的存储过程,它在指定的表中的数据

25、发生变化时自动生效,实现表间的数据完整性和复杂的业务规则。与前面介绍过的存储过程不同,存储过程可以通过存储过程名字被直接调用,而触发器不能,触发器主要通过事件进行触发而自动执行的。当对某一表进行诸如INSERT UPDATE或 DELETE操作时,如果在这些操作上定义了触发器,SQL Server就会自动执行触发器(执行触发器中所定义的SQL语句),从而确保对数据的处理必须符合由这些SQL语句所定义的规则。触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性,除此之外,触发器还有其他许多不同的功能。 强化约束:触发器能够实现比CHECK语句更为复杂的约束。CHE

26、CK勺束不允许引用其他表中的列来完成检查工作,而触发器可以引用其他表中的列。 跟踪变化:触发器可以侦测数据库的操作,从而不允许数据库中未经许可的指定更新和变化。 级联运行:触发器可以侦测数据库内的操作,并自动地级联影响整个数据库的相关内容。例女口,某个表上的触发器中包含有对另外一个表的数据操作(如插入、更新、删除),而该操作又导致该表上触发器被触发。2. 触发器类型在SQL Server2005中,触发器分为 DML触发器和DDL触发器两大类。当数据库中发生数据操作 语言(DML事件时将调用DML触发器,当服务器或数据库中发生数据定义语言( DDL事件时将调用 DDL触发器。DML触发器是当数

27、据库服务器中发生数据库操作语言(DML事件时要执行的操作。DML事件包括对表或视图发出的 UPDATE INSERT或DELETE语句。DML触发器用于在数据库修改时强制执行业务规 则,以及扩展SQL Server2005约束、默认值和规则的完整性检查逻辑。根据DML触发器被激活的时机不同又可以分为AFTER触发器和INSTEAD OF触发器。 AFTER触发器又称为后触发器。 在执行了 INSERT UPDATE或 DELETE语句操作之后执行 AFTER 触发器。指定AFTER触发器与指定FOR相同,它是Microsoft SQLServer早期版本中唯一可用的选项,但AFTER触发器只能

28、在表上指定。 INSTEADO F触发器又称为替代触发器。该类触发器代替触发器操作执行,即触发器在数据发生变动之前被触发,取代变动数据的操作(INSERT UPDATE或 DELETE操作),执行触发器定义的操作。该类触发器既可在表上定义,也可在视图上定义。对于每个触发器操作 (INSERT、UPDATED DELETE只能定义一个 INSTEAD OF触发器。DDL触发器是SQLServer2005的新增功能。DDL触发器是一种特殊的触发器,它不会为响应针对 表或视图的UPDATE INSERT或DELETE语句而激发。相反,它在响应数据定义语言( DDL语句时触 发,这些语句主要是以 CR

29、EATE ALTER和DROP开头的语句。它们可以用于数据库中执行管理任务, 例如,审核以及规范数据库操作。因为DDL触发器和DML触发器可以使用相似的 SQL语法进行创建、修改和删除,它们还具有其他 相似的行为。所以这里只介绍DML触发器的创建与使用。10.2.2 inserted 表和 deleted 表系统为每个触发器创建两个特殊临时表: inserted 表和 deleted 表。这两个表都是逻辑表,由 系统管理存储在内存中,它们在结构上与该触发器作用的表相同。这两个表是只读,用户不能对其修 改和写入内容,但可以在触发器执行过程中引用这两个表中的数据。当触发器工作完成后,与该触发 器相

30、关的这两个表也被删除。Inserted 表用于存储INSERT和UPDATED句所影响的行的副本。如果表存在INSERT触发器,向 表中插入数据时,系统将自动创建一个与触发器具有相同表结构的Inserted 临时表,新的记录被添加到触发器表和 Inserted 表中。 Inserted 表就是用来存储向原表插入的纪录副本。Deleted表用于存储 DELETE和 UPDATED句所影响的行的副本。在执行 DELETE或 UPDATED句时, 从触发器表中删除原记录,并把删除的记录的副本临时存放到daleted 表中。这样做的目的是:一旦触发器遇到了强迫它中止的语句被执行时,删除的那些行可以从d

31、eleted 表中得以恢复。【提示】修改表中的数据,相当于删除一条旧的记录,添加一条新的记录。其中,被删除的记录放在 Deleted 表中,添加 的新的记录放在 Inserted 表中。10.2.3 创建与管理触发器1使用 T-SQL 创建与管理触发器T-SQL语言使用CREATE TRIGGER?令创建触发器。创建 DML触发器的基本语句格式:CREATE TRIGGER 触发器名ON 表 | 视图 FOR|AFTER|INSTEAD OFINSERT|UPDATE|DELETEASDMI语句【案例 10-12 】在 stu 数据库的学生表 student 中创建一个触发器 tr_scxs

32、,当学生表 student 有 记录被删除时,显示“ XXX同学信息已被你成功删除! ”。创建该触发器代码如下:CREATE TRIGGER tr_scxsON studentFOR DELETEASBEGINDECLARE xsxx CHAR(10)SELECT xsxx=s_name FROM DELETEDPRINT xsxx +同学信息已被你成功删除! END创建触发器后,删除一条记录,验证该触发器,代码如下:Use stuGoDelete student where s_num=0806010101执行以上删除记录语句后,结果如图10-10所示。十 MIcrasxjFt 呂qL Se

33、rver Management Studio文阚曰 端指向 bi(v)査询 顼目也 工啟D 宙口删 社(边 银肋! 1M5O僅聖|必|刼IF1夸越|魁圈亘全对象序i阶理祸 “XXGtXXGE.ftu - stu tsp|fql4WiGCVfflC匚点u - SuLQuer 詛? x|连他F出 IUse stu亠1曰XMGCXXQC (SQL Server 9. Dd 599 -曰N憩据库S Q眾轴舸E库 田J逾充库快瞪B 0 stu回二融蚪阵关康圍EE表田 J IfflE田二a同冥词田_可斓程性 El _J Scrviw Broker 田存儲1 2d安全陛GODele七皂 student wh

34、ere 3 num= * 0fi060101Dlf 1 .LilJ )赵讀同学您息已被你成功制除i1行受嶷响)Jastudent(心性1订3 晝诲巳威.3 iKGCnoc pciEm)ixsr眄j O) stu poioo oo0 船爲行4列1chiThi图10-10删除记录激活触发器返回信息【提示】虽然DMI触发器可以引用临时表,但不能对临时表或系统表创建 DMI触发器。对含有用DELET或UPDAT操作定义的外键的表,不能定义INSTEAGDFDELETE口 INSTEAGDFUPDAT触发器。 -TRUNCATE TABL语句不会触发 DELETE触发器,因为 TRUNCATE TABL

35、语句没有执行记录。【案例10-13】在stu数据库中创建一个删除触发器tr_delxs,当表student中的记录要被删除时,激活该触发器,显示“不能删除本表中的数据!请与管理员联系!”的提示信息。创建该触发器代码如下:USE stuGOCREATE TRIGGER tr_delxsON studentINSTEAD OF DELETEASPRINT 不能删除本表中的数据!请与管理员联系!GO创建该触发器后,删除一条记录,验证触发器,代码如下:Use stuGoDelete student where s_num=0602010102执行以上删除记录语句后,结果如图10-11所示。再重新打开s

36、tudent表时发现学号为0602010102的学生记录还在,没有被删除。图10-11要删除记录时激活触发器并返回信息2 .使用SSMS创建触发器【案例10-14】为stu ”数据库的stucourse表创建一个更新触发器tr_upsc,当更新了该表中的X条记录信息时,显示“你已经成功更新的记录信息有X条! ”。操作步骤如下:(1) 启动SQLServer Management Studio ,在【对象资源管理器】中依次展开【数据库】宀【stu】 t【表】节点。(2) 展开stucourse表,右键单击【触发器】,选择【新建触发器】,如图10-12所示。(3) 打开【新建触发器】模板文档窗口,

37、根据相应提示输入创建触发器的文本,创建代码如下。(4 )执行创建触发器的语句,语句成功执行后,则创建好触发器。创建该触发器代码如下:USE stuGOCREATE TRIGGER tr_upscON stucourseAFTER UPDATEASBEGINdeclare num tinyintselect num=count(*) from insertedprint/*你已经成功更新的记录信息有 +ltrim(str(num)+ 条! */ENDGO使用UPDATE吾句更新表stucourse中学号为0501010103的学生成绩,每门成绩都减少 5分,验证该触发器的功能,如图10-13所示

38、。图10-12选择新建触发器图10-13更新信息激发触发器返回信息10.2.4 查看触发器信息1. 使用系统存储过程查看触发器使用系统存储过程sp_helptrigger 和sp_helptext可以查看触发器,但作用有所差异:使用sp_helptrigger 返回的是触发器的类型,而使用 sp_helptext则显示触发器的定义文本。使用系统存储过程sp_helptrigger查看触发器的基本语句格式如下:sp_helptrigger 表名,触发器类型使用系统存储过程sp_helptext查看触发器的基本语句格式如下:sp_helptext触发器名【案例10-15】查看student表中所有

39、触发器的相关信息,同时也显示触发器tr_delxs 的定义文本。代码如下:Use stugosp_helptrigger studentGOsp_helptext tr_delxsGO2 使用 SSMS 查看触发器信息使用SSMS查看触发器的相关信息的步骤如下。(1)启动 SQL Server Management Studio ,在【对象资源管理器】窗口中,依次展开【数据库】stu】宀表(如student表)宀【触发器】节点。(2)在【触发器】节点中,右击需要查看的触发器,在快捷菜单中选择【查看依赖关系】命令, 在【对象依赖关系】对话框中,可以查看该触发器和相关表的依赖关系。在快捷菜单中选择

40、【修改】命令,可以查看触发器的定义文本信息。【提示】 在第(2)步骤的右键快捷菜单中选择“修改”命令,也可以对触发器重新修改定义;选择“删除”命令可以删除 该触发器。10.2.5 修改触发器1. 使用 T-SQL 语言修改触发器T-SQL语言使用ALTER TRIGGER令修改DML触发器,基本语句格式如下。ALTER TRIGGER 触发器名ON 表 | 视图FOR | AFTER |INSTEAD OF INSERT |UPDATE |DELETEASSQL语句修改触发器与创建触发器的语法基本相同,只是将创建触发器的CREATED键字换成了 ALTER关键字而已 , 在这里不再举例说明它的

41、用法。2. 使用 SSMS 修改触发器请参阅“使用SSMS查看触发器信息”部分。10.2.6 禁用、启用和删除触发器1.使用 T-SQL 语句禁用、启用和删除触发器( 1)禁用触发器可以使用DLSABLE TRIGGER:令禁用DML触发器,基本语句格式如下:DISABLE TRIGGER触发器名,n|ALLON 对象名 | 数据库 | 服务器【案例 10-17 】禁用 student 表上的触发器 tr_delxs 。代码如下:Use stuGoDISABLE TRIGGER tr_delxs ON student【提示】禁用触发器不会删除该触发器,该触发器仍然作为对象存在于当前数据库中。禁

42、用触发器后,执行相应的T-SQL语句时,不会引发触发器。( 2)启用触发器可以使用ENABLE TRIGGEf命令启用DML触发器,基本语句格式如下:ENABLE TRIGGER触发器名,n|ALLON 对象名 | 数据库 | 服务器ENABLE TRIGGE啲基本使用同 DISABLE TRIGGER但作用相反。(3)删除触发器可以使用DROP TRIGGE命令删除DML触发器,基本语句格式如下:DROP TRIGGER触发器,n【案例 10-18 】删除 student 表中的 tr_delxs 触发器。DROP TRIGGER tr_delxsGO【提示】:仅当所有触发器均使用相同的ON

43、子句创建时,才能使用一个DROP TRIGGBS句删除多个DDL触发器。2使用 SSMS 禁用、启用和删除触发器使用 SQL Server Management Studio 禁用、启用和删除触发器的步骤如下:(1)启动 SQL Server Management Studio ,在【对象资源管理器】中依次展开【数据库】节点、 触发器所在的【数据库】节点和【表】节点、 【触发器】节点。( 2)右键单击相应的触发器,弹出右键快捷菜单。(3)选择【禁用】命令,即可禁用选定的触发器;选择【启用】命令,即可恢复触发器为活动应 用状态;选择【删除】命令 , 即刻删除所选的触发器。10.3 案例应用【提示

44、】 在各题案例中,在创建存储过程或触发器之前,可以先使用如下代码检测是否已存在该对象,如果存在则先删除 再创建,这里各题案例都是假设之前不存在的情况。删除语法如下:IF EXISTS(SELECT NAME FROM SYSOBJECTS WHERE NAME 对象名AND TYPE =类型)DROP PROCEDURRIGGER寸象名对象名:创建的存储过程名或触发器名;类型:存储过程是 P,触发器是TR一、存储过程综合案例【案例10-19】在Stu数据库中,创建一个加密的存储过程Sc_xs,通过该存储过程查询选修课成绩都及格的学生的信息。Use stuGoCreate proc sc_xsWith EncryptionAsSelect *From student where s_num not in /*成绩及格的学生 */(Select s_numFrom stucourse where sc_grade 0BEGINSELECT *FROM studentWhere s_name = NameENDELSEpri

温馨提示

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

评论

0/150

提交评论