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

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介:

触发器(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
相关文章
|
3月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
5月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
135 13
|
5月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
|
4月前
|
SQL 存储 数据管理
深入理解SQL中的触发器
【8月更文挑战第31天】
93 0
|
5月前
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
74 6
|
4月前
|
SQL 存储 关系型数据库
|
5月前
|
存储 SQL C++
对比 SQL Server中的VARCHAR(max) 与VARCHAR(n) 数据类型
【7月更文挑战7天】SQL Server 中的 VARCHAR(max) vs VARCHAR(n): - VARCHAR(n) 存储最多 n 个字符(1-8000),适合短文本。 - VARCHAR(max) 可存储约 21 亿个字符,适合大量文本。 - VARCHAR(n) 在处理小数据时性能更好,空间固定。 - VARCHAR(max) 对于大文本更合适,但可能影响性能。 - 选择取决于数据长度预期和业务需求。
475 1
|
5月前
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
397 3
|
4月前
|
SQL 安全 Java
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
545 0
|
5月前
|
SQL 监控 数据库
SQL Server 查询超时问题排查
【7月更文挑战第8天】排查 SQL Server 查询超时涉及五个主要方面:检查复杂查询、评估服务器性能、审视配置参数、更新统计信息和分析执行计划。关注点包括查询的结构(如连接、子查询和索引),服务器资源(CPU、内存、网络延迟),连接和内存设置,以及统计信息的时效性。通过这些步骤可定位并解决性能瓶颈。
140 0

热门文章

最新文章