MS SQL Server:DDL 触发器
DDL 触发器 (本文转摘于网络)
1. DDL Trigger 触发事件总汇:
在创建用来监视并响应该数据库或服务器实例中的活动的事件通知时,可以指定相应事件类型或事件组。
DDL_DATABASE_LEVEL_EVENTS 包括:
DDL_TRIGGER_EVENTS,
DDL_FUNCTION_EVENTS,
DDL_SYNONYM_EVENTS,
DDL_SSB_EVENTS,
DDL_DATABASE_SECURITY_EVENTS,
DDL_EVENT_NOTIFICATION_EVENTS,
DDL_PROCEDURE_EVENTS,
DDL_TABLE_VIEW_EVENTS,
DDL_TYPE_EVENTS,
DDL_XML_SCHEMA_COLLECTION_EVENTS,
DDL_PARTITION_EVENTS,
DDL_ASSEMBLY_EVENTS
DDL_SERVER_LEVEL_EVENTS 包括:
DDL_DATABASE_EVENTS,
DROP_DATABASE,
DDL_ENDPOINT_EVENTS,
CREATE_DATABASE,
DDL_SERVER_SECURITY_EVENTS,
ALTER_DATABASE
2. DDL Trigger 语法
-- Trigger on a CREATE, ALTER, DROP, GRANT, DENY, REVOKE, or UPDATE
-- STATISTICS statement (DDL Trigger)
CREATE TRIGGER trigger_name
ON { ALL SERVER | DATABASE }
[ WITH <ddl_trigger_option> [ ,...n ] ]
{ FOR | AFTER } { event_type | event_group } [ ,...n ]
AS { sql_statement[ ; ] [ ,...n ] | EXTERNAL [url=URL]NAME[/url] < method specifier >[ ; ] }
<ddl_trigger_option> ::=
[ ENCRYPTION ]
[ EXECUTE AS Clause ]
<method_specifier> ::=
assembly_name.class_name.method_name
-- Trigger on a LOGON event (Logon Trigger)
CREATE TRIGGER trigger_name
ON ALL SERVER
[ WITH <logon_trigger_option> [ ,...n ] ]
{ FOR | AFTER } LOGON
AS { sql_statement[ ; ] [ ,...n ] | EXTERNAL NAME <method specifier>[ ; ] }
<logon_trigger_option> ::=
[ ENCRYPTION ]
[ EXECUTE AS Clause ]
<method_specifier> ::=
assembly_name.class_name.method_name
3. 删除DDL trigger
从系统中删除DDL触发器不能像删除其他对象那样可以简单的通过 DROP object_type object_name 来实现。对于 DDL 触发器,需要在触发器的作用域钱使用一个前缀。
语法:
DROP TRIGGER trigger_name ON { DATABASE | ALL SERVER}
4. EVENTDATA( ) 函数
当事件触发时,尽管这里没有 INSERTED 和 DELETED 表提供检查什么被改变了,但可以使用名为 EVENTDATA( ) 的函数。该函数返回一个 XML 数据类型,其中包含触发器的事件信息。XML数据的基本语法如下,不过,根据被触发的时间不同,函数中的内容也会有所不同。
<SQLInstance>
<PostTime>date-time</PostTime>
<SPID>spid</SPID>
<ComputerName>name</ComputerName>
</SQLInstance>
数据库级别事件具有下面的基本语法,这同以前显示的语法基本语法不同:
<SQLInstance>
<PostTime>date-time</PostTime>
<SPID>spid</SPID>
<ComputerName>name</ComputerName>
<DatabasesName>name</DatabasesName>
<UserName>name</UserName>
<LoginName>name</LoginName>
</SQLInstance>
XML元素 描述如下:
PostTime:事件触发的日期和时间Ø
Ø SPID:指派到导致触发器被触发的代码上的SQLServer进程ID
ComputerName:导致事件被触发的计算机名称Ø
Ø DatabasesName:导致事件被触发的数据库名称
UserName: 导致事件被触发的用户名称Ø
Ø LoginName: 导致事件被触发的用户登录名
实例:如果是工作时间,则不允许修改任何存储过程,否则回滚
DROP TRIGGER TEST_DDL_TRIGGER ON DATABASE
GO
CREATE TRIGGER TEST_DDL_TRIGGER
ON DATABASE
FOR CREATE_PROCEDURE, ALTER_PROCEDURE, DROP_PROCEDURE
AS
IF DATEPART(hour, GETDATE()) >=9 AND DATEPART(hour, GETDATE()) <= 17
BEGIN
DECLARE @Message nvarchar(max)
SELECT @Message =
'Completing work during core hours. Trying to release -'
+ EVENTDATA().value(
'(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]',
'nvarchar(max)')
RAISERROR(@Message, 16, 1)
ROLLBACK
END
GO
例2:创建一个数据库中发生任何行为时都被触发的触发器:
DROP TRIGGER TEST_DDL_TRIGGER_3 ON DATABASE
GO
CREATE TRIGGER TEST_DDL_TRIGGER_3
ON DATABASE
FOR DDL_DATABASE_LEVEL_EVENTS
AS
SELECT EVENTDATA()
GO
接下来创建一个存储过程,来查看返回的XML数据:
CREATE PROCEDURE TEST_TRIGGER_UTIL
AS
SELECT 'Hello all ~'
GO
返回的 XML 数据如下(经过格式化后):
<EVENT_INSTANCE>
<EventType>CREATE_PROCEDURE</EventType>
<PostTime>2008-03-31T13:53:35.397</PostTime>
<SPID>56</SPID><ServerName>ZHANGZJSQLEXPRESS</ServerName>
<LoginName>ZHANGZJDavid_Zhang</LoginName>
<UserName>dbo</UserName>
<DatabaseName>MySQLServer</DatabaseName>
<SchemaName>dbo</SchemaName>
<ObjectName>TEST_TRIGGER_UTIL</ObjectName>
<ObjectType>PROCEDURE</ObjectType>
<TSQLCommand>
<SetOptions ANSI_NULLS="ON" ANSI_NULL_DEFAULT="ON" ANSI_PADDING="ON" QUOTED_IDENTIFIER="ON" ENCRYPTED="FALSE" />
<CommandText>
CREATE PROCEDURE TEST_TRIGGER_UTIL
AS
SELECT 'Hello all ~'
</CommandText>
</TSQLCommand>
</EVENT_INSTANCE>
5. 小结
DML 触发器可以看作是一种特殊的存储过程,可以版主系统保持其完整性,在系统中进行级联更新或强行业务规则。通过 INSERTED 和 DELETED 两个表,我们可以检索哪些列被更新了。DML触发器的本质就是当这两个表中发生数据修改时自动运行的存储过程。
DDL 触发器的构建主要是为了安全,或者根据部门的需求对系统所进行的变更进行通报。通过使用 EVENTDATA( ) 函数,可以在触发器中使用XML信息。
分享到:
相关推荐
首先,标题中的"sqlserver自动生成sql语句工具"指的是可以分析SQL Server数据库结构和数据,自动生成对应的SQL创建语句的软件。这种工具通常能帮助数据库管理员快速获取数据库的定义,便于备份、迁移或在其他环境中...
2. **T-SQL扩展**:T-SQL(Transact-SQL)是SQL Server特有的扩展,包括控制流程语句(如IF...ELSE, WHILE)、变量定义、存储过程和触发器等,这些都是进行复杂业务逻辑操作的关键。 3. **数据库设计**:理解范式...
2. **触发器**:解释触发器的工作原理,如何定义和使用DML(数据操纵语言)触发器和DDL(数据定义语言)触发器。 **五、事务与并发控制** 1. **事务管理**:理解事务的基本概念,包括ACID属性、事务的提交和回滚。...
MS SQL Server数据库技巧总绍与T-SQL主要语句详解 在IT领域,数据库管理是至关重要的,尤其在企业级应用中,Microsoft SQL Server(MS SQL Server)作为一款广泛使用的数据库管理系统,其强大的功能和高效的性能...
这部分内容将详细对比Oracle和MS SQL Server在SQL语法上的差异,包括但不限于数据定义语言(DDL)、数据操纵语言(DML)、存储过程和函数的编写方式、触发器和视图的实现以及游标的具体使用等。 八、数据库复制、...
### SQL基础 - MS-SQL Server 基础类知识点总结 #### 1. 为什么学习SQL 自从人类社会诞生以来,信息(包括文献、档案、资料、数据等)的管理和利用就成为社会发展的重要组成部分。随着计算机技术和互联网的发展,...
1. SQL Server 2000提供的服务包括:MS SQL Server服务、SQL Server Agent服务、MS DTC(分布式事务协调器)服务。 2. SQL语言主要由三部分组成:数据定义语言(DDL)、数据操作语言(DML)、数据控制语言(DCL)。 ...
另一个简答题可能要求解释SQL Server中的各种完整性约束,如实体完整性(主键约束)、域完整性(如检查约束)、参照完整性(外键约束)和用户定义的完整性(自定义规则和触发器)。 这些知识点构成了SQL Server...
此外,SQL Developer还能与非Oracle数据库(如MySQL、SQL Server、MS Access)建立连接,以浏览对象和数据。 2. **浏览对象**: 通过对象浏览器,用户可以以树形结构查看和管理数据库中的各种对象,包括表、视图、...
在探讨SQL Server 2008的新特性时,我们聚焦于其对Transact-SQL编程能力的增强,以及对SQL/Common Language Runtime (CLR)的改进。这些新特性旨在提升性能、增加功能,并加强全球化支持,满足了在线事务处理(OLTP)...
例如,Visual Foxpro、Access和MS SQL Server都有各自特定的SQL变体,如Access中的J-SQL和MS SQL Server中的T-SQL。 SQL的发展历程包括ANSI在1986年的SQL86,ISO在1989年的SQL89,以及后续的SQL92和SQL99标准,后者...
#### 第1章 Transact-SQL DDL - **1.1 创建数据库** - 数据库是存储数据的容器,Transact-SQL 提供了 `CREATE DATABASE` 命令来创建新的数据库。 - 创建数据库时可以指定其初始大小、最大大小以及增长方式等参数...
在MS SQL Server 2008中,本机审核是一个重要的功能,它允许系统管理员监控数据库活动,确保数据安全性和法规遵从性。本机审核是SQL Server提供的一种内置机制,用于跟踪和记录数据库级别的事件,这些事件可以是登录...
MSDTS提供了事务处理服务,可以在分布式事务中使用SQL Server。 #### 四、使用Access访问SQL Server **4.1 概述** 介绍了如何使用Access连接SQL Server,并设计和开发基于SQL Server的Access应用程序。 **4.2 ...
实验一主要是为了让学生熟悉MS SQL Server环境,并掌握SQL的基础操作,包括数据库的创建和使用、表的定义、数据的插入、删除和修改等。 实验二涉及数据库设计,可能涵盖概念模型设计、关系模型转换以及ER图到表的...
- **支持多种平台和数据库**:除了Oracle,GoldenGate还支持其他数据库系统如SQL Server、MySQL等。 - **支持复杂数据类型和操作**:包括BLOB、CLOB等大对象,以及复杂的事务操作。 总之,Oracle GoldenGate的...
通过实践的方式,读者能够更好地掌握如何在MS SQL Server 2000环境中创建数据库、表结构,设置完整性约束,并进行基本的数据查询、更新等操作。 #### 二、实验内容概述 本实验主要分为以下几个部分: 1. **设计并...
`通常用于结束一条SQL语句,但在某些系统(如MS Access和SQL Server 2000)中,这不是必需的。 SQL的高级特性包括: 1. **分页查询**:如SQL Server中的`TOP`子句,用于限制返回的记录数,实现分页显示。 2. **...
SQL Server是Microsoft公司推出的一款企业级数据库管理系统,具有高度稳定性和强大的性能。本资源"超经典的SQL代码,及代码集"聚焦于SQL的实用技巧和高效代码片段,对于SQL初学者以及有经验的开发者来说,都是宝贵的...
- **SQL概述**:这部分讲解了数据库的基本概念,包括数据库的历史发展,常用数据库类型的介绍,以及如何安装和理解MS SQL Server 2000的组件。 - **数据库用户管理**和**角色管理**:涉及如何创建、管理用户账户,...