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

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:

触发器(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语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
22小时前
|
SQL 存储 数据库连接
LabVIEW与SQL Server 2919 Express通讯
LabVIEW与SQL Server 2919 Express通讯
|
1天前
|
SQL Windows
安装SQL Server 2005时出现对性能监视器计数器注册表值执行系统配置检查失败的解决办法...
安装SQL Server 2005时出现对性能监视器计数器注册表值执行系统配置检查失败的解决办法...
11 4
|
2天前
|
SQL 数据可视化 Oracle
这篇文章教会你:从 SQL Server 移植到 DM(上)
这篇文章教会你:从 SQL Server 移植到 DM(上)
|
2天前
|
SQL 关系型数据库 数据库
SQL Server语法基础:入门到精通
SQL Server语法基础:入门到精通
SQL Server语法基础:入门到精通
|
2天前
|
SQL 存储 网络协议
SQL Server详细使用教程
SQL Server详细使用教程
23 2
|
2天前
|
SQL 存储 数据库连接
C#SQL Server数据库基本操作(增、删、改、查)
C#SQL Server数据库基本操作(增、删、改、查)
5 0
|
3天前
|
SQL 存储 小程序
数据库数据恢复—Sql Server数据库文件丢失的数据恢复案例
数据库数据恢复环境: 5块硬盘组建一组RAID5阵列,划分LUN供windows系统服务器使用。windows系统服务器内运行了Sql Server数据库,存储空间在操作系统层面划分了三个逻辑分区。 数据库故障: 数据库文件丢失,主要涉及3个数据库,数千张表。数据库文件丢失原因未知,不能确定丢失的数据库文件的存放位置。数据库文件丢失后,服务器仍处于开机状态,所幸未写入大量数据。
数据库数据恢复—Sql Server数据库文件丢失的数据恢复案例
|
3天前
|
SQL 存储 关系型数据库
SQL Server详细使用教程及常见问题解决
SQL Server详细使用教程及常见问题解决
|
4天前
|
SQL 安全 数据库
SQL Server 备份和还原
SQL Server 备份和还原
|
4天前
|
SQL 存储 安全
SQL Server 权限管理
SQL Server 权限管理