网站大量收购独家精品文档,联系QQ:2885784924

《SQServer20触发器.docVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《SQServer20触发器

SQL Server 2000触发器 一、简介 触发器是一种特殊的存储过程,类似于其它编程语言中的事件函数,SQL?Serve2000?允许为?INSERT、UPDATE、DELETE?创建触发器,当在表(视图)中插入、更新、删除记录时,触发一个或一系列?T-SQL?语句。 两大类:DML触发器和DLL触发器。 优缺点 触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。除此之外,触发器还有其它许多不同的功能: 1强化约束(Enforce restriction)  触发器能够实现比CHECK 语句更为复杂的约束。 2跟踪变化Auditing changes  触发器可以侦测数据库内的操作,从而不允许数据库中未经许可的指定更新和变化。 3级联运行(Cascaded operation)。  触发器可以侦测数据库内的操作,并自动地级联影响整个数据库的各项内容。例如,某个表上的触发器中包含有对另外一个表的数据操作(如删除,更新,插入)而该操作又导致该表上触发器被触发。 5存储过程的调用(Stored procedure invocation)。  为了响应数据库更新触,发器可以调用一个或多个存储过程,甚至可以通过外部过程的调用而在DBMS( 数据库管理系统)本身之外进行操作。  由此可见,触发器可以解决高级形式的业务规则或复杂行为限制以及实现定制记录等一些方面的问题。例如,触发器能够找出某一表在数据修改前后状态发生的差异,并根据这种差异执行一定的处理。此外一个表的同一类型(INSERT、 UPDATE、 DELETE)的多个触发器能够对同一种数据操作采取多种不同的处理。  总体而言,触发器性能通常比较低。当运行触发器时,系统处理的大部分时间花费在参照其它表的这一处理上,因为这些表既不在内存中也不在数据库设备上,而删除表和插入表总是位于内存中。可见触发器所参照的其它表的位置决定了操作要花费的时间长短。 2、注意事项 1在视图上创建普通触发器可能会出现“对象无效”的错误,实际上,我们不能在视图上创建?FOR?触发器,而应该创建?INSTEAD?OF?触发器。在?SQL Server 2000?联机丛书中,是没有说触发器不能在视图上创建的,?并且在语法解释中表明:在?CREATE?TRIGGER?的?ON?之后可以是视图。?然而,事实似乎并不是如此,很多专家也说触发器不能在视图上创建。?我也专门作了测试,的确如此,不管是普通视图还是索引视图,都无法在上面创建触发器.?但是无可厚非的是:当在临时表或系统表上创建触发器时会遭到拒绝。 2FOR?CREATE?TRIGGER?语句 FOR?关键字之后可以跟?INSERT、UPDATE、DELETE?中的一个或多个,也就是说在其它情况下是不会触发触发器的,?包括?SELECT、TRUNCATE、WRITETEXT、UPDATETEXT。 3Truncate与delete的区别:TRUNCATE?TABLE?和不带?WHERE?的?DELETE?功能是一样的,都是删除表中的所有数据,不过?TRUNCATE?TABLE?速度更快,占用的日志更少,这是因为?TRUNCATE?TABLE?直接释放数据页并且在事务日志中也只记录数据页的释放,而?DELETE?是一行一行地删除,在事务日志中要记录每一条记录的删除。? 那么可不可以用?TRUNCATE?TABLE?代替不带?WHERE?的?DELETE?呢?在以下情况是不行的:? 1、要保留标识的情况下,不能用?TRUNCATE?TABLE,因为?TRUNCATE?TABLE?会重置标识。? 2、需要使用触发器的情况下,不能使用?TRUNCATE?TABLE?,它不会激发触发器。? 3、对于由?FOREIGN?KEY?约束引用的表(即主键所在的表,不是外键所在的表)不能使用?TRUNCATE?TABLE。? 4、对于参与了索引视图的表不能使用?TRUNCATE?TABLE?,注意指索引视图,并非普通视图。? 二、触发器常用功能操作 1一个有趣的触发器应用:触发器回滚 触发器内部语句出错时,前面对数据更改操作将会无效。?举个例子,在表中插入数据时触发触发器,而触发器内部此时发生了运行时错误,那么将返回一个错误值,并且拒绝刚才的数据插入。? 我们看到许多注册系统在注册后都不能更改用户名,但这多半是由应用程序决定的,?如果直接打开数据库表进行更改,同样可以更改其用户名,在触发器中利用回滚就可以巧妙地实现无法更改用户名。? CREATE TRIGGER trigger_name ON 表名? FOR update? AS if?update(userName)? rollback?transaction 关键在最后两句,其解

文档评论(0)

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

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

1亿VIP精品文档

相关文档