一般来说,DML触发器可以监测得到具体对象的具体数据的变更。然而,DDL触发器则能够对一些服务器的行为作出监控,比如我们可以利用DDL触发器来做登录限制啊,做一些日志控制啊之类的。

好,然后简单粗暴上例子

首先我们做一个监控创建表的触发器,DDL触发器,一个关键点是在于 EVENTDATA() 这个函数提供的信息。

CREATE TRIGGER TR_CreateTable ON ALL SERVER FOR CREATE_TABLE
AS
BEGIN
SELECT EVENTDATA(); END
GO

在其他情况下,调用 EVENTDATA(),它返回的恒定是一个NULL值,然而,当在DDL触发器里面,它在作用就至关重大了,基本上需要捕获的消息,都可以通过这个函数获取,这个对于这个函数,返回的结构可以参考如下

<EVENT_INSTANCE>
<EventType>CREATE_TABLE</EventType>
<PostTime>2015-12-19T11:03:45.223</PostTime>
<SPID>54</SPID>
<ServerName>IN</ServerName>
<LoginName>sa</LoginName>
<UserName>dbo</UserName>
<DatabaseName>Test</DatabaseName>
<SchemaName>dbo</SchemaName>
<ObjectName>T1</ObjectName>
<ObjectType>TABLE</ObjectType>
<TSQLCommand>
<SetOptions ANSI_NULLS="ON" ANSI_NULL_DEFAULT="ON" ANSI_PADDING="ON" QUOTED_IDENTIFIER="ON" ENCRYPTED="FALSE" />
<CommandText>CREATE TABLE T1(ID INT)</CommandText>
</TSQLCommand>
</EVENT_INSTANCE>

要记录的东西基本都有了。稍加处理,即可做成操作记录了。

然后我们改造一下这个触发器,变成新增修改表都要触发,然后执行如下语句

ALTER TRIGGER TR_CreateTable ON ALL SERVER FOR CREATE_TABLE,ALTER_TABLE
AS
BEGIN
SELECT EVENTDATA();
SELECT EVENTDATA().value('(EVENT_INSTANCE/EventType)[1]','varchar(50)'),
EVENTDATA().value('(EVENT_INSTANCE/ObjectName)[1]','varchar(50)');
END
GO ALTER TABLE T1 ADD col1 VARCHAR(50)
<EVENT_INSTANCE>
<EventType>ALTER_TABLE</EventType>
<PostTime>2015-12-19T11:19:21.947</PostTime>
<SPID>54</SPID>
<ServerName>IN</ServerName>
<LoginName>sa</LoginName>
<UserName>dbo</UserName>
<DatabaseName>Test</DatabaseName>
<SchemaName>dbo</SchemaName>
<ObjectName>T1</ObjectName>
<ObjectType>TABLE</ObjectType>
<AlterTableActionList>
<Create>
<Columns>
<Name>col1</Name>
</Columns>
</Create>
</AlterTableActionList>
<TSQLCommand>
<SetOptions ANSI_NULLS="ON" ANSI_NULL_DEFAULT="ON" ANSI_PADDING="ON" QUOTED_IDENTIFIER="ON" ENCRYPTED="FALSE" />
<CommandText>ALTER TABLE T1 ADD col1 VARCHAR(50)</CommandText>
</TSQLCommand>
</EVENT_INSTANCE>

看,比前面新增Table多出了  AlterTableActionList 这个节点。所以说,不同的时间,显示出来的格式都不一样。可以做的东西也千变万化,只是有一点,临时对象不会触发DDL触发器。

 
PS:1、登录触发器不能有返回结果集
      2、登录触发器不能运行出错,慎重,不然就什么都干不了。(不要问我怎么知道的)
  3、任何功能都都有优点和缺点,只有最适合的,没有最优的~么么么哒
  4、欢迎各位指教拍砖

DDL触发器的应用的更多相关文章

  1. SQL Server DDL触发器运用

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 基础知识(Rudimentary Knowledge) DDL运用场景(DDL Scene) ...

  2. SQLServer之创建Transact-SQL DDL触发器

    DDL触发器原理 DDL 触发器用于响应各种数据定义语言 (DDL) 事件. 这些事件主要与以关键字 CREATE.ALTER.DROP.GRANT.DENY.REVOKE 或 UPDATE STAT ...

  3. 使用DDL触发器同步多个数据库结构

    使用DDL触发器同步多个数据库结构 背景:当开发组比较大时,势必会分布到不同的地理位置,若无法在同一个快速网络中工作,就会造成多个开发库并存的局面,这样就需要多个开发库结构的同步,甚至是开发测试数据的 ...

  4. DDL触发器(用来控制用户的DDL行为)

    DDL触发器 禁止scott用户的所有DDL操作 create or replace trigger scott_forbid_trigger before ddl on schema begin r ...

  5. 记录数据库操作记录的DDL触发器

    我们在项目中经常会对数据做一些操作,比如增加一个字段,修改一个存储过程,删除表等等操作,很有必要记录这些操作,以便以后出了问题,方便找到元凶.接下来介绍一个DDL触发器在实际环境中的使用,这个DDL触 ...

  6. SQL Server DDL触发器

    DDL 触发器作用: DDL 触发器主要用于防止对数据库架构.视图.表.存储过程等进行的某些修改. DDL 触发器事件: DDL 触发器在创建用来监视并响应该数据库或服务器实例中的活动的事件通知时,可 ...

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

    原文:监控SQL:通过SQL Server的DDL触发器来监控数据库结构的变化(1) 如果你要同步不同数据库之间的数据,首先会想到的是数据库复制技术,但如果让你同步数据库的结构,你会想到什么呢? 下面 ...

  8. 【监控笔记】【3.1】DML(CDC)、DDL(DDL触发器)跟踪数据更改,数据库审计

    关键词:数据库审计.DDL审计.DML审计 [监控笔记][3.1]DML(CDC).DDL(DDL触发器)跟踪数据更改 [1]DML(CDC) 2008及以上 https://www.cnblogs. ...

  9. oracle触发器——ddl触发器

    什么是ddl(data definition language),说白了就是我们经常用的create.alter和drop这些数据定义语句. n  创建ddl触发器 请编写一个触发器,可以记录某个用户 ...

随机推荐

  1. CXF和spring整合遇到的问题:No bean named 'cxf' is defined

    今天在做ws和spring整合的时候,很不幸的遇到了这个问题,百度了好久,竟然没人遇到这个问题,后来谷歌了一下,都是遇到这个问题的了...在看到一篇文章中提到了cxf.xml,所以我果断的打开这个配置 ...

  2. 2015暑假多校联合---Cake(深搜)

    题目链接:HDU 5355 http://acm.split.hdu.edu.cn/showproblem.php?pid=5355 Problem Description There are m s ...

  3. contentResolver

    今天练习一个联系人的增,写,改,查的几项操作,其中一个重要的知识点  ContentResolver 还有一篇不错的参考文献 主要参见下面这个链接  http://cthhqu.blog.51cto. ...

  4. SDL制作拼图游戏

    看完教程第三集后,好像自己能用这个来写一个简单的拼图游戏,第一次写出个带界面的游戏,好有成就感. 图片是自己慢慢截左上部分8个脸. #include <stdio.h> #include ...

  5. jQuery Danmmu Player 弹幕视频

    Danmmu Player是基于jQuery的弹幕视频插件.当在看视频的时候,同时发表自己的观点,这样很好的提高用户互动效果.其实也就是在视频界面上做一个滚动展示动画效果,这样的聊天互动视频效果我们叫 ...

  6. Web 开发中应用 HTML5 技术的10个实例教程

    HTML5 作为下一代网站开发技术,无论你是一个 Web 开发人员或者想探索新的平台的游戏开发者,都值得去研究.借助尖端功能,技术和 API,HTML5 允许你创建响应性.创新性.互动性以及令人惊叹的 ...

  7. Ext.store.load callback

    var paramsReceivable = {};                paramsReceivable.querytext = Ext.getCmp('hiddquerytext').g ...

  8. 自定义Sublime Text图标详细教程

    改造后的Sublime 先看看我改造后的神器图标,接下来你就知道下面是干什么的了 :               之前无意间在刘哇勇的博客上看到这么一篇文章,很好奇就尝试着更改Sublime Text ...

  9. SAP学习日志--RFC REMOTE FUNCTION CALL

    RFC  Remote function Call 远程功能调用, 是SAP系统之间以及非SAP系统之间程序通信的基本接口技术. 例如BAPI , ALE都是基于RFC实现的 SAP系统提供了三种外部 ...

  10. ABAP 动态生成内表的几种方法

    最近要写个程序,既有更新的,也有删除的,需要涉及到很多系统表,如果一个表一个表进行更新或者删除太慢了,于是就想通过创建动态内表来实现这些功能,在网上找了一些资料,经过多次尝试,终于测试成功了.网上讲述 ...