在MSSQLServer中创建触发器.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1. 触发器的概念??? 触发器是一种特殊类型的存储过程。当表中数据被修改时,SQL Server将自动执行触发器。使用触发器可以实施较为复杂的数据完整性约束。??? 在SQL Server中,数据库的表之间可以声明参照完整性约束,即主键(PRIMARYKEY)和外键(FOREIGNKEY)约束。在同一数据库中的简单参照 完整性通常由主键和外键约束来实现。但是,由于声明参照完整性约束不能参照其他数据库中的对象,而对于数据库之间的参照完整性约束就只有通过触发器来实 现。引用完整性约束与触发器,对数据操作构成了双重的有效性约束。??? 当对一个同时具有约束和触发器的表进行数据修改操作时,SQL Server将先进行约束检查,然后再执行触发器检查。如果这些语句的操作符合约束条件,系统将完成数据操作,然后再激活触发器;如果该语句未能通过约束 检查,将不执行该数据操作语句,也就不可能激活触发器。如果某语句通过了约束检查而未能通过触发器检查,触发器也将取消该语句已经执行完毕的操作。??? 触发器的主要优点是:??? 任何一种对触发器表中数据进行修改的操作(包括操作人员录入数据或其他应用程序的修改)都能自动激活触发器,从而触发对这些操作进行的完整性检查。??? (1)触发器能够实施的检查和操作比主键和外键约束、CHECK约束和规则对象等更为复杂。例如,CHECK约束只能根据一个逻辑表达式或同一个表中其他列值来检查指定列值的有效性,而使用触发器时则可以参照其他表中的列值。??? (2)触发器建立在表一级,它与特定的数据修改事件相对应。而INSERT、UPDATE和DELETE三种操作都可能导致数据的修改,所以SQL Server中的触发器可分为 INSERT触发器、UPDATE触发器和DELETE触发器三种。而且SQL Server 2000版本中允许对同一数据对象修改事件、同一个数据操作定义多个触发器,这在SQLServer7.0以前的版本中是被禁止的。??? 触发器只能由数据库所有者创建。因为当为某一个表或表的列、行创建触发器时,表的访问方式及其对象之间的关系也随之改变了。也就是说,触发器的创建变动了数据库模式,所以创建触发器的权利应该保留给数据库的所有者,以防止普通用户无意间修改了系统格局。2. 触发器的创建????????? 触发器(TRIGGER)由Transact-SQL中的CREATE TRIGGER语句创建,语句中应该包含所定义触发器基于的表、激活触发器的数据操作事件名称以及触发器所要执行的相应操作。CREATE TRIGGER语句不允许带参数,也不允许被直接调用,而只能由系统自动激活。CREATE TRIGGER定义触发器有两种格式。第一种格式定义触发器的触发事件为INSERT、UPDATE、DELETE等操作。其语法格式如下:01CREATETRIGGER[owner,]trigger_name02?03????On[owner,]table_name04?05????[WITHENCRYPTION]06?07????{08?09????FOR{[INSERT][,UPDATE][,DELETE]}10?11????[NOTFORREPLICATION]12?13????ASsql_statements14?15????}??????? 在上述语句中:??? ① trigger_name:为创建的触发器名称,它必须遵守SQL Server的命名规则,而且同一个数据库中不允许出现触发器名称相同的情况。??? ② table_name:为该语句中定义的触发器所基于的表,也称为触发表。??? ⑧ WITH ENCRYPTION选项:SQL Server将触发器的定义文本保存在系统分类表 syscomments中,选用此项要求SQL Server对该触发器定义文本进行加密存储,以防止第三方用户从syscomments表中读取该触发器定义文本的内容。??? ④ NOT FOR REPLICATION选项:说明在复制过程中出现修改触发表数据时,触发器不被激活。??? ⑤ FOR{[INSERT][,UPDATE][,DELETE]}:定义触发器的触发事件。当某一个触发器由表中的多个事件触发时,可以在INSERT、UPDATE、DELETE之间使用“,”符号作为间隔符来组合表示。??? ⑥sql_statements:定义触发器在触发事件发生时(被激活时)所要执行的操作。??? 创建触发器的第二种定义格式中的触发事件仅限于INSERT和UPDATE。其语法格式为:01CREATETRIGGER[owner,]trigger_name02?03????On[owner,]table_name04?05????????[WITHENCRYP

文档评论(0)

whhv364 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档