SQL2005 DDL触发器

在数据库中有三种数据语言:

DDL(Data Definition Language):数据定义语言。如Create Drop Alter等

DML(Data Manipulation):数据操纵语言。如Insert ,Update,Delete

DCL(Data Control Language):数据控制语言 .如Grant,Revoke等

在2000中只可以为DML做触发器,而在2005中,可以为DDL做触发器,我们叫它DDL触发器

一:
    Microsoft SQL Server 2005 在数据库引擎 中引入了多项能提高程序员的开发能力和工作效率的改进和新功能。其中DDL触发器就是其中之一。

除了对修改数据的数据操作语言语句(INSERT、UPDATE 和 DELETE)所激发的触发器提供支持外,数据库引擎 还包括一类新的触发器,由修改数据库对象的 DDL 语句(如以 CREATE、ALTER 或 DROP 开头的语句)激发。DDL 触发器可用于审核或控制对数据库架构的更改。

像常规触发器一样,DDL 触发器将激发存储过程以响应事件,这些语句主要是以 CREATE、ALTER 和 DROP 开头的语句。DDL 触发器可用于管理任务,例如审核和控制数据库操作。

仅在运行触发 DDL 触发器的 DDL 语句后,DDL 触发器才会激发。DDL 触发器无法作为 INSTEAD OF 触发器使用。

二:
    在响应当前数据库或服务器中处理的 Transact-SQL 事件时,可以激发 DDL 触发器。触发器的作用域取决于事件。例如,每当数据库中发生 CREATE TABLE 事件时,都会触发为响应 CREATE TABLE 事件创建的 DDL 触发器。每当服务器中发生 CREATE LOGIN 事件时,都会触发为响应 CREATE LOGIN 事件创建的 DDL 触发器。
  
    在下面的示例中,每当数据库中发生 DROP TABLE 事件或 ALTER TABLE 事件,都将触发 DDL 触发器 safety:
    CREATE TRIGGER safety
    ON DATABASE
    FOR DROP_TABLE, ALTER_TABLE
    AS
       PRINT 'You must disable Trigger "safety" to drop or alter tables!'
       ROLLBACK
    ;

数据库范围内的 DDL 触发器都作为对象存储在创建它们的数据库中。可以在 master 数据库中创建 DDL 触发器,这些 DDL 触发器的行为与在用户设计的数据库中创建的 DDL 触发器一样。可以从创建 DDL 触发器的数据库上下文中的 sys.triggers 目录视图中,或通过指定数据库名称作为标识符(例如 master.sys.triggers)来获取有关这些 DDL 触发器的信息。

服务器范围内的 DDL 触发器作为对象存储在 master 数据库中。不同的是,可以从任何数据库上下文中的 sys.server_triggers 目录视图中获取有关数据库范围内的 DDL 触发器的信息。

使用 EVENTDATA 函数,可以捕获有关激发 DDL 触发器的事件的信息。此函数返回 xml 值。

三:

以下示例创建用于存储所有数据库级事件的相关信息的表,并在表中填充 DDL 触发器。通过对 EVENTDATA 生成的 XML 数据使用 XQuery,可以捕获事件类型和 Transact-SQL 语句。
  
    USE AdventureWorks;
GO
CREATE TABLE ddl_log (PostTime datetime, DB_User nvarchar(100), Event nvarchar(100), TSQL nvarchar(2000));
GO
CREATE TRIGGER log
ON DATABASE
FOR DDL_DATABASE_LEVEL_EVENTS
AS
DECLARE @data XML
SET @data = EVENTDATA()
INSERT ddl_log
   (PostTime, DB_User, Event, TSQL)
   VALUES
   (GETDATE(),
   CONVERT(nvarchar(100), CURRENT_USER),
   @data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'),
   @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)') ) ;
GO
--Test the trigger.
CREATE TABLE TestTable (a int)
DROP TABLE TestTable ;
GO
SELECT * FROM ddl_log ;
GO
--Drop the trigger.
DROP TRIGGER log
ON DATABASE
GO
--Drop table ddl_log.
DROP TABLE ddl_log
GO

转载于:https://www.cnblogs.com/lmkong/archive/2008/11/18/1336032.html

SQL2005 DDL触发器相关推荐

  1. oracle数据库登录失败触发器,oracle数据库登录、DDL触发器的应用

    登录触发器 oracle登录记录触发器: 1.创建日志记录表: CREATE TABLE SYSTEM.LOGIN_LOG ( SESSION_ID NUMBER, LOGIN_ON_TIME DAT ...

  2. 表级触发器不支持ddl语句_表上的数据库级DDL触发器

    表级触发器不支持ddl语句 This article portrays the different utilization of database DDL Triggers for the Table ...

  3. 表级触发器不支持ddl语句_用于视图,过程和函数的数据库级DDL触发器

    表级触发器不支持ddl语句 In this article, we will un-riddle the ways to make use of the data definition languag ...

  4. 监控SQL:通过SQL Server的DDL触发器来监控数据库结构的变化(1)

    如果你要同步不同数据库之间的数据,首先会想到的是数据库复制技术,但如果让你同步数据库的结构,你会想到什么呢? 下面是一个例子,用来说明通过sql server中的DDL触发器,来记录create ta ...

  5. DDL触发器与DML触发器比较

    DML触发器 DML触发器就是普通的  INSERT / UPDATE / DELETE 触发器. DDL触发器就是一些特有的 DDL 语句的触发器. 例如:登陆到服务器的触发, 创建数据库的触发.  ...

  6. 触发器系列一之DDL触发器

    近期出于同步数据的需求,需要创建一个具有在目标数据库具有alter table权限的帐号,但是由于该工具在alter table同步表结构时会同时频繁发起create index和drop index ...

  7. OGG-误删DDL触发器ggs_ddl_trigger_before恢复

    1.说明 在RAC环境中,由于两个节点都部署了OGG,而且部署同一套.而其中一个节点的OGG后期不需要了,需要卸载掉. 卸载OGG:https://blog.csdn.net/qianglei6077 ...

  8. Oracle入门(十四.22)之创建DDL和数据库事件触发器

    一.什么是DDL和数据库事件触发器? DDL语句触发DDL触发器:CREATE,ALTER或DROP. 数据库事件触发器由数据库中的非SQL事件触发,例如: •用户连接到数据库或与数据库断开连接. • ...

  9. OGG-ggs_ddl_trigger_before触发器名称对于DDL同步没有影响

    1.说明 熟悉OGG的都知道,OGG是通过ggs_ddl_trigger_before触发器来捕获DDL操作并同步到目标库中,在一次部署RAC环境两个节点的OGG,要求两个节点部署两套OGG,由于默认 ...

最新文章

  1. 奇淫怪巧之给Delphi的PrintDialog增加一个页码选定范围打印的Edit
  2. 深度学习仍是视觉大数据领域的最好分析方法之一
  3. ES6 -Set 和 Map 数据结构
  4. 聊聊storm TridentBoltExecutor的finishBatch方法
  5. 互联网经济与实体经济
  6. Mysql判断字符串存在性find_in_set
  7. GDB调试程序系列 (3)
  8. 客房收费系统数据库设计
  9. php快速开发框架津县,BetePHP:一个轻量级快速开发框架
  10. python cookies过期_Python3中关于cookie的创建与保存
  11. Windows函数错误处理
  12. 《纽约时报》:乔布斯是伟大的暴君
  13. 杭电第七次作业c语言短学期,杭电短学期:算法与编程.doc
  14. 老员工恳请加薪,老板“不愿意做就辞职”
  15. SpringMVC:学习笔记(2)——RequestMapping及请求映射
  16. 使用wagtail搭建cms的安装流程
  17. Navigator对象,获取浏览器类型userAgent,机器类型platform
  18. linux服务器后台运行Python程序
  19. python简单图形输出_基于 Python Matplotlib 模块的高质量图形输出
  20. SSH远程登陆主机和SCP远程文件复制

热门文章

  1. gnu grub修复_如何修复grub异常
  2. 动态规划算法实验报告_搞懂这几点,动态规划算法就是那么简单
  3. tidyr | 对数据框分行或分列进行嵌套操作
  4. 云服务器ecs搭建环境,ECS云服务器linux下搭建开发环境
  5. 不懂函数能学c语言吗,不会函数能学C语言吗
  6. parallels网络初始化失败_出神入化:特斯拉AI主管、李飞飞高徒Karpathy的33个神经网络炼丹技巧...
  7. web前端开发是干嘛的?
  8. 学会java基础能找工作吗?
  9. 前端开发的难点到底在什么地方?
  10. 深挖前端 JavaScript 知识点 —— 史上最全面、最详细的 Cookie 总结