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

第8章 存储过程和触发器.ppt

  1. 1、本文档共123页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[{ IF UPDATE(column) [{AND | OR } UPDATE(column)] […n] | IF (COLUMNS_ UPDATED() {bitwise_operator} updated_bitmask) { comparison_operator } column_bitmask […n] } ] sql_statement […n] } } 2.参数说明 参数trigger_name用于指定触发器名。触发器名必须符合标识符规则,并且在数据库中必须惟一,可以包含触发器所有者名。 table l view是触发器表或触发器视图,即在其上执行触发器的表或视图。有时,可以包含表或视图的所有者名。 关键字WITH ENCRYPTION可防止将触发器作为SQL Server复制的一部分发布。 AFTER关键字用于说明触发器在指定操作都成功执行后触发,AFTER是默认设置,不能在视图上定义AFTER触发器。 INSTEAD OF指定用触发器中的操作代替触发语句的操作,在表或视图上,每个INSERT、UPDATE或DELETE语句最多可以定义一个INSTEAD OF触发器。如果触发器表存在约束,则在INSTEAD OF触发器执行之后和AFTER触发器执行之前检查这些约束。如果违反了约束,则回滚INSTEAD OF触发器操作且不执行AFTER触发器,INSTEAD OF触发器不能在WITH CHECK OPTION可更新视图上定义。 关键字DELETE、 INSERT和UPDATE用于指定在表或视图上执行这一操作时将激活相应的触发器,必须指定一项或多项,项与项之间用逗号分隔。 关键字选项NOT FOR REPLICATION指该触发器对于复制进程无效。 IF UPDATE(column)子句用于测试在指定的列上进行的INSERT或UPDATE操作,不能用于DELETE操作;UPDATE(column)中的column为表或者视图中的列名称,说明这一列的数据是否被INSERT或者UPDATE操作修改过。如果修改过,则返回TRUE,否则返回FALSE。 IF(COLUMNS_UPDATED())子句用于测试是否插入或更新了指定的列。返回的二进制位数据,表示插入或更新了表中的哪些列,若对应位为0,表示没有插入或更新;若对应位为1,表示对该列进行了插入或更新。关于表文件的列与二进制位的对应关系为:如果表的列从左向右分别为C0,C1,C2,C3,C4…则分别对应二进制位的第0位、第1位、第2位、第3位、第4位……依此类推。 如果在表上创建的触发器包含8列以上,则COLUMNS_UPDATED()返回多个字节。 在INSERT操作中,COLUMNS_UPDATED将对所有列返回TRUE值, IF(COLUMNS_ UPDATED())仅用于INSERT或UPDATE触发器。 bitwise_opemtor为用于比较运算的位运算符。updated_bitmask为整型的位屏蔽码,假定该表上有UPDATE触发器,若要检查列C1、C2、C4是否都有更新,可指定updated_bitmask的值即22);若要检查是否只有列C1有更新,可指定updated_bitmask的值即2)。 comparison_operator为比较运算符。使用等号(=)检查updated_bitmask中指定的所有列是否都实际进行了更新。使用大于号()检查update_bitmask中指定的任一列或某些列是否已更新。 column_bitmask为列屏蔽码,用来检查是否已更新或插入了对应列。  参数sql_statement为触发器的T-SQL语句,当执行DELETE、INSERT或UPDATE操作时,对应的触发器操作将生效。 n表示触发器中可以包含多条T-SQL语句。 USE Student GO /*如果表B1存在,则删除*/ IF EXISTS (SELECT name FROM sysobjects WHERE name=B1) DROP TABLE B1 GO CREATE TABLE B1 ( student_number int, student_name char(30) ) GO /*如果触发器Query1_B1存在,则删除*/ IF EXISTS (SELECT name FROM sysobjects WHERE name=Query1_B1 AND type=TR) DROP TRIGGER Query1_B1 GO /*创建触发器Q

文档评论(0)

yaocen + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档