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

大型数据库_第4章存储过程与触发器.ppt

  1. 1、本文档共83页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
大型数据库_第4章存储过程与触发器要点

8.修改触发器 修改触发器内容:使alter trigger命令 ; 修改触发器名称,使用sp_rename系统存储过程。 9.禁用与启用DML触发器 ALTER TABLE table_name Disable/enable trigger trigger_name 例:禁用触发器time_sc_trigger。 ALTER TABLE SC DISABLE TRIGGER TIME_SC_TRIGGER DDL 触发器 DDL触发器与DML触发器有许多类似的地方,都可以自动触发完成规定的操作或使用CREATE TRIGGER语句创建等,但是也有一些不同的地方。例如,DDL触发器的触发事件主要是CREATE、ALTER、DROP以及GRANT、DENY、REVOKE等语句,并且触发的时间条件只有AFTER,没有INSTEAD OF。 1.使用时机 一般来说,在以下几种情况下可以使用DDL触发器: 数据库里的架构或数据表架构很重要,不允许修改; 防止数据库或数据表被误删除; 在修改某个数据表结构的同时修改另一个数据表的相应结构; 要记录对数据库结构操作的事件。 2.定义DDL触发器 创建DDL触发器的CREATE TRIGGER语句的基本语法形式如下: CREATE TRIGGER trigger_name ON { ALL SERVER | DATABASE } WITH ENCRYPTION { FOR | AFTER } {event_type} AS sql_statement CREATE TRIGGER trigger_name ON { ALL SERVER | DATABASE } WITH ENCRYPTION { FOR | AFTER } {event_type} AS sql_statement ALL SERVER:将 DDL或登录触发器的作用域应用于当前服务器。如果指定了此参数,则只要当前服务器中的任何位置上出现event_type或event_group,就会激发该触发器。 DATABASE:将DDL触发器的作用域应用于当前数据库。如果指定了此参数,则只要当前数据库中出现event_type或event_group,就会激发该触发器。 FOR或AFTER是同一个意思,指定的是After触发器。 event_type:触发事件。 例1:建立一个DDL触发器,用于保护数据库中的数据表不被修改、删除。 Create trigger disable_table ON DATABASE FOR DROP_TABLE,ALTER_TABLE AS Print 对不起,您不能对数据表进行操作 ROLLBACK; 例2:建立一个DDL触发器,用于保护当前SQL Server 服务器里的所有数据库不被删除。 Create trigger disable_db ON all server FOR DROP_DATABASE AS Print 对不起,您不能删除数据库 ROLLBACK; 例3:建立一个DDL触发器,用于记录数据库修改状态。 (1)先建立一个用于记录数据库修改状态的表: CREATE TABLE 日志记录表( 编号 int IDENTITY(1,1) NOT NULL PRIMARY KEY, 事件 Varchar(5000) NULL, 所用语句 varchar(5000) NULL, 操作者 varchar(50) NULL, 发生时间 datetime NULL) (2)建立DDL触发器: Create trigger log_tri ON DATABASE FOR DDL_DATABASE_LEVEL_EVENTS AS DECLARE @log XML SET @log=EVENTDATA() INSERT into 日志记录表(事件,所用语句,操作者,发生时间) VALUES(@log.value((/EVENT_INSTANCE/EventType)[1],varchar(100)), @log.value((/EVENT_INSTANCE/TSQLCommand)[1],varchar(2000)), CONVERT(varchar(100),CURRENT_USER),GETDATE()); 其中EVENTDATA是个数据库函数,它的作用是以XML格式返回有关服务器或数据库事件的信息;@log.value是返回log这个XML节点的值,节点的位置是括号里的第一个参数。 测试: create table test(col1 char(2)) 3.启用/禁用触发器 使用DISABLE TRIGGER禁用触发器,ENABLE TRIGGER启用触发器。

文档评论(0)

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

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

1亿VIP精品文档

相关文档