SQL Server DDL 触发器(Trigger)-- 介绍-阿里云开发者社区

开发者社区> 技术小甜> 正文

SQL Server DDL 触发器(Trigger)-- 介绍

简介:
+关注继续查看

触发器(Trigger)以往仅用在特定的对象上,如数据表。当数据维护语言(DML)的Insert、Delete、Update语法针对这些对象工作时,由系统自动调用对应的触发器,而在SQL Server 2000中增加了Instead of Trigger,通过触发器来取代原本要执行的添加、修改、删除语法,且可以设置在视图上。由于Instead of Trigger是在DML语法真的改变数据写入事务日志之前触发,因此,也称为Before Trigger,而我们一般编写在事务已经发生并写入日志后的触发器,则称为After Trigger。

 

在SQL Server 2005之后,则扩展了触发器的应用面,加入数据定义语言(DDL)触发器功能。针对DDL语法的执行,乃至于服务器实例/数据库执行相关的存储过程、事件也可以启动触发器。可用来规范、跟踪与监控数据库架构的变化,例如新建、修改或删除数据表时,要求在什么条件下允许更改数据表;记录是谁在何时对哪些数据表的定义,做了什么样的更动。如果说DML触发器是属于数据表级别的程序,那么,DDL触发器就是属于数据库级别或是服务器级别的程序,可以针对数据库等级的语法触发DDL触发器。

 

你可能针对数据库等级的语法触发DDL触发器,如CREATE_TABLE;也可以是服务器等级的语法,如CREATE_LOGIN,通过在触发器内执行ROLLBACK TRANSACTION语法,能够将原来用户执行的DDL语法回滚,就如同没有执行该语法一样。与DML触发器相同的是:执行一句DDL可能同时触发多个DDL触发器,但我们无法掌控其执行顺序,所以,DDL触发器间不能有先后的依存关系。

 

创建DDL触发器的语法也是CREATE TRIGGER,其定义如下:

 

CREATE TRIGGER <trigger name>

ON { ALL SERVER | DATABASE }

[ WITH <ddl_trigger_option> [ …,n ]]

{ FOR | AFTER } { event_type | event_group } [ ,…n ]

AS { SQL [ …n ] | EXTERNAL NAME <method definition> }

 

在编写DDL触发器时,要指定其针对的目标是ON DATABASE或ON ALL SERVER;两者可引发触发器的事件不相同,例如,前者是定义数据库内的对象,event_type选项有CREATE_TABLE、CREATE_USER、CREATE_SCHEMA等,而后者则是以整个服务器为目标,其event_type有CREATE_LOGIN、CREATE_ENDPOINT等。你可以发现,若要列出触发器所针对的DDL语法,是在该语法间以下划线(_)连接。若不想列出event_type,系统已预先将各种DDL语法分类,例如,DDL_SERVER_SECURITY_EVENTS代表所有以服务器为目标的各类DDL语法事件,而DDL_TABLE_VEIW_EVENTS则代表了针对数据表、视图、索引与统计的DDL事件。至于有哪些event_type和event_group,以及其间树状结构的关系,你可以参照联机丛书的详细列表。

 

最后,在指定DDL触发器实际的内容定义时,可以是T-SQL写成的语法,也可以参照.NET来编写的组件(Assembly)内的方法。

 

DML的触发器在执行时,能参照SQL Server引擎所创建的deleted和inserted临时表,而DDL触发器执行时,则可以调用EVENTDATA()系统函数,以获取DDL触发器执行时相关的系统信息。该函数返回XML格式的数据,可以T-SQL的XQuery解析其内容。

















本文转自UltraSQL51CTO博客,原文链接:http://blog.51cto.com/ultrasql/1598184 ,如需转载请自行联系原作者


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SQL提示介绍-强制并行
查询提示一直是个很有争议的东西,因为他影响了sql server 自己选择执行计划。很多人在问是否应该使用查询提示的时候一般会被告知慎用或不要使用...但是个人认为善用提示在不修改语句的条件下,是常用手段。
717 0
Android Studio 通过一个登录功能介绍SQLite数据库的使用
前言:         SQLite简介:是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
4226 0
菜鸟入门【ASP.NET Core】9:RoutingMiddleware介绍以及MVC引入
前言 前面介绍了使用app.Map来配置路由,但是对于一般不是特别大的项目来说,不使用Map来进行路由配置。 配置路由 我们首先需要在Startup.cs文件中的ConfigureServices方法中进行路由依赖注入 services.
888 0
MySQL 基础---触发器(TRIGGER)
触发器: 实现由一些表事件触发的某个操作,是与数据库对象表关联最紧密的数据库对象之一。在数据库系统中,当执行表事件时,则会激活触发器,从而执行其包含的操作。
651 0
菜鸟入门【ASP.NET Core】8:Middleware管道介绍、自己动手构建RequestDelegate管道
中间件:是汇集到以处理请求和响应的一个应用程序管道的软件。 每个组件: 可以选择是否要将请求传递到管道中的下一个组件。 之前和之后调用管道中的下一个组件,可以执行工作。 使用请求委托来生成请求管道。
1239 0
SQL Plan Management介绍
基于成本的优化法则基于统计信息找到最优执行计划,但是一些环境的变化可能影响执行计划的改变如: ·         New optimizer version ·         Changes to optimizer statist...
763 0
VisualSvn Server介绍
1 、VisualSvn Server  VisualSvn Server是免费的,而VisualSvn是收费的。VisualSvn是Svn的客户端,和Visual Studio集成在一起,但是不免费,使用AnkhSvn(VS2008插件)来代替VisualSvn。
726 0
SQLServer CDC数据迁移和数据抽取功能介绍 2
数据库环境: 1、SQLServer 2008R2 2、SQLServer 代理打开 一、新建一个数据库 创建数据库 Incremental_DB image.
962 0
+关注
10146
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载