SQL Server 2005 中的DDL触发器应用
2006-05-24 14:43
555 查看
DDL 触发器像标准触发器一样,在响应事件时执行存储过程。但与标准触发器不同的是,它们并不在响应对表或视图的 UPDATE、INSERT 或 DELETE 语句时执行存储过程。它们主要在响应数据定义语言 (DDL) 语句执行存储过程。这些语句包括 CREATE、ALTER、DROP、GRANT、DENY、REVOKE 和 UPDATE STATISTICS 等语句。
若要获取数据库中的 DDL 触发器示例,请打开 SQL Server Management Studio 对象资源管理器中的“数据库触发器”文件夹(位于数据库的“可编程性”文件夹中)。右键单击 触发器 并选择“编写数据库触发器脚本为”。默认情况下禁用 DDL 触发器 触发器脚本。
数据库->可编程性->数据库触发器
应用1:
以下示例说明了如何使用 DDL 触发器来防止数据库中的任一表、存储过程被创建、修改或删除:
CREATE TRIGGER safety
ON database
FOR CREATE_TABLE,DROP_TABLE,
ALTER_TABLE,CREATE_PROCEDURE,
ALTER_PROCEDURE,DROP_PROCEDURE
AS
PRINT 'You must disable Trigger "safety" to drop or alter tables!'
ROLLBACK
go
--测试(建表)
Create table TEST(a int)
--消息
You must disable Trigger "safety" to drop or alter tables!
消息 3609,级别 16,状态 2,第 1 行
事务在触发器中结束。批处理已中止。
--启用触发器:
ENABLE TRIGGER safety ON DATABASE;
--禁用触发器:
DISABLE TRIGGER safety ON DATABASE;
应用2:
利用DDL 触发器,跟踪数据库修改状态(日志记录)
--结果
/*
PostTime DB_User Event TSQL
---------------------------------- ------------------ ----------------- ---------------------------------
2006-04-26 18:54:26.200 dbo CREATE_TABLE CREATE TABLE TestTable (a int)
2006-04-26 18:54:26.200 dbo DROP_TABLE DROP TABLE TestTable ;
*/
若要获取数据库中的 DDL 触发器示例,请打开 SQL Server Management Studio 对象资源管理器中的“数据库触发器”文件夹(位于数据库的“可编程性”文件夹中)。右键单击 触发器 并选择“编写数据库触发器脚本为”。默认情况下禁用 DDL 触发器 触发器脚本。
数据库->可编程性->数据库触发器
应用1:
以下示例说明了如何使用 DDL 触发器来防止数据库中的任一表、存储过程被创建、修改或删除:
CREATE TRIGGER safety
ON database
FOR CREATE_TABLE,DROP_TABLE,
ALTER_TABLE,CREATE_PROCEDURE,
ALTER_PROCEDURE,DROP_PROCEDURE
AS
PRINT 'You must disable Trigger "safety" to drop or alter tables!'
ROLLBACK
go
--测试(建表)
Create table TEST(a int)
--消息
You must disable Trigger "safety" to drop or alter tables!
消息 3609,级别 16,状态 2,第 1 行
事务在触发器中结束。批处理已中止。
--启用触发器:
ENABLE TRIGGER safety ON DATABASE;
--禁用触发器:
DISABLE TRIGGER safety ON DATABASE;
应用2:
利用DDL 触发器,跟踪数据库修改状态(日志记录)
USE 数据库; GO CREATE TABLE ddl_log (PostTime datetime, DB_User nvarchar(100), Event nvarchar(100), TSQL nvarchar(2000)); GO CREATE TRIGGER log ON DATABASE FOR DDL_DATABASE_LEVEL_EVENTS AS DECLARE @data XML SET @data = EVENTDATA() INSERT ddl_log (PostTime, DB_User, Event, TSQL) VALUES (GETDATE(), CONVERT(nvarchar(100), CURRENT_USER), @data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'), @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)') ) ; GO --Test the trigger CREATE TABLE TestTable (a int) DROP TABLE TestTable ; GO SELECT * FROM ddl_log ; GO
--结果
/*
PostTime DB_User Event TSQL
---------------------------------- ------------------ ----------------- ---------------------------------
2006-04-26 18:54:26.200 dbo CREATE_TABLE CREATE TABLE TestTable (a int)
2006-04-26 18:54:26.200 dbo DROP_TABLE DROP TABLE TestTable ;
*/
相关文章推荐
- SQL Server 2005 中的DDL触发器应用
- 使用 SQL SERVER 2005 新增功能--- DDL_DATABASE_LEVEL_EVENTS 数据库级的触发器,创建数据库日志表
- sql server 2005中的DDL触发器
- SQL Server 2005 触发器应用
- [SQL2005触发器学习]-4、SQL SERVER 2005新增功能:DDL触发器
- sql server 2005中的DDL触发器
- 用SQL Server 2005DDL触发器对数据库进行监控
- sql server 2005中的DDL触发器
- sql server 2005中的DDL触发器
- SQL Server 2005 触发器应用
- sql server 2005中的DDL触发器
- 使用asp.net 2.0和SQL SERVER 2005构建多层应用
- oracle数据库登录、DDL触发器的应用
- SQL Server 2005全文检索技术在网站上的应用实录
- Sql Server触发器的原理及应用技巧
- SQL Server 2005中触发器监控数据库变化
- SQL Server DDL 触发器(Trigger)-- 介绍
- 触发器(七、DDL触发器在OGG维护中的应用)
- 数据库原理与应用 基于SQL Server 2005pdf
- SQL Server 2005/2008 触发器的管理和查看