拼吾爱程序人生

首页 » 数据库编程 » SQL Server » Sql Server2005 Transact-SQL 学习总结之-DDL触发器
cobra - 2008-9-2 8:03:00
1.简介:
Sql Server2005新增加了DDL触发器。
与DML触发器不同的是,它们不会为响应针对表或视图的UPDATE、INSERT或DELETE语句而激发。
相反,它们将为了响应各种数据定义语言(DDL)事件而激发。
这些事件主要与以关键字CREATE、ALTER和DROP开头的Transact-SQL语句对应。
执行DDL式操作的系统存储过程也可以激发DDL触发器。


2.作用:
如果要执行以下操作,可以使用DDL触发器:
(1)要防止对数据库架构进行某些更改。
(2)希望数据库中发生某种情况以响应数据库架构中的更改。
(3)要记录数据库架构中的更改或事件。


3.DDL 触发器作用域:
(1)数据库范围:数据库范围内的DDL触发器都作为对象存储在创建它们的数据库中。
(2)服务器范围:服务器范围内的DDL触发器作为对象存储在master数据库中。
例如:当数据库中发生CREATE TABLE事件时,都会触发为响应CREATE TABLE事件创建的数据库范围DDL触发器。
每当服务器上发生CREATE Index事件时,都会触发为响应CREATE Index事件创建的服务器范围DDL触发器。


4.与DML触发器比较不同处:
(1)DML触发器在INSERT、UPDATE和DELETE语句上操作。
(2)DDL触发器在CREATE、ALTER、DROP和其他DDL语句上操作。
(3)只有在完成Transact-SQL语句后才运行DDL触发器。DDL 触发器无法作为 INSTEAD OF 触发器使用。
(4)DDL触发器不会创建插入(inserted)的和删除(deleted)的表.但是可以使用EVENTDATA函数捕获有关信息。


5.例题:

Code


--收到下列消息
Database Created
<EVENT_INSTANCE><EventType>CREATE_DATABASE</EventType><PostTime>2008-09-01T20:17:35.170</PostTime><SPID>52</SPID><ServerName>YANFA0</ServerName><LoginName>YANFA0\Administrator</LoginName><DatabaseName>db1</DatabaseName><TSQLCommand><SetOptions ANSI_NULLS="ON" ANSI_NULL_DEFAULT="ON" ANSI_PADDING="ON" QUOTED_IDENTIFIER="ON" ENCRYPTED="FALSE"/><CommandText>CREATE DATABASE db1;</CommandText></TSQLCommand></EVENT_INSTANCE>

Code


--收到下列消息
--我们从消息可以看到删除索引不成功!
DROP INDEX
消息 3609,级别 16,状态 2,第 2 行
事务在触发器中结束。批处理已中止。

Code


(文/aierong  出处/博客园)

 您可能对 [SQL Server] 的这些文章也感兴趣:

SQL Server中删除重复数据的几个方法
一场雷雨引发的惨案!
SQL Server数据库被挂马的解决方案
SQL Server SQL语句导入导出大全
在SQL Server中存储图像时强化管理界面
关于SQL server中字段值为null的查询
SQL Server 2005 Express混合模式登录设置
SQL Server连接ACCESS数据库的实现
一个字节造成的巨大性能差异——SQL Server存储结构
Oracle数据库与SQL Server数据库中的临时表
1
查看完整版本: Sql Server2005 Transact-SQL 学习总结之-DDL触发器
Modify by pin5i DZNT_ExpandPackage 2.1.3258 2007-2008 pin5i.com
  Total Unique Visitors: