SQL Server 2005 中的DDL触发器应用

转载 2006年05月24日 14:43:00

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 触发器,跟踪数据库修改状态(日志记录)

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 ; 
*/

SQL2005 触发器简介

原文链接 触发器实际上就是一种特殊类型的存储过程,其特殊性表现在:它在执行某些特定的T-SQL语句时是自动的。  触发器简介 触发器实际上就是一种特殊类型的存储过程,它是在执行某些特定的T-SQ...
  • qq_34496400
  • qq_34496400
  • 2016年04月06日 09:38
  • 590

创建DDL触发器

转自 :http://blog.csdn.net/jaune161/article/details/47300697 创建用户并授权 #需要使用sys用户授权 CREATE USER DBADMI...
  • u012232730
  • u012232730
  • 2016年12月22日 17:48
  • 344

SQL Server之DDL语句总结

--删除表 DROP TABLE TABLE_01 GO --创建表 CREATE TABLE TABLE_01 ( [TEST_FIELD_Z][varchar] (5) NOT NULL D...
  • davinciyxw
  • davinciyxw
  • 2014年03月31日 10:40
  • 3078

利用Oracle DDL触发器实现DDL监控

前言创建此触发器的主要目的是为了控制数据库的版本,虽然会将DDL语句保留但难免会出现遗漏,所以创建DDl触发器记录DDL操作,主要是用来核对数据库变更的SQL语句创建用户并授权...
  • jaune161
  • jaune161
  • 2015年08月05日 17:31
  • 3271

SQL Server 触发器学习总结

SQL菜鸟入门级教程之触发器     触发器简介:   触发器(trigger)是种特殊的存储过程,它的执行不是由程序调用,也不需要手动操作,它是由事件来触发,事件大家应该非常熟悉吧,比如按钮的Cli...
  • bcbobo21cn
  • bcbobo21cn
  • 2016年03月12日 12:18
  • 1706

DDL触发器+CDC 查看sql 2008 数据库表的日志

一、触发器写法:IF EXISTS (SELECT * FROM sys.triggers WHERE parent_class_desc = 'DATABASE' AND name = N'DDL...
  • hezudao25
  • hezudao25
  • 2013年06月03日 16:25
  • 2716

SqlServer2008--建立触发器实例

 http://www.cnblogs.com/caishuhua226/archive/2012/12/11/2813227.html SqlServer2008--建立触发器实例 ...
  • hewusheng10
  • hewusheng10
  • 2016年05月16日 09:00
  • 1010

SQL Server 2005 最大容量规范

 SQL Server 2005 数据库引擎对象 最大大小/数量 SQL Server 2005(32 位) 最大大小/数量 SQL Server 2005(64 位) ...
  • cxzhq2002
  • cxzhq2002
  • 2014年05月27日 16:37
  • 765

SQL Server 2005中触发器监控数据库变化

sql中如何建立一个触发器,使出入和删除某条记录时,系统能自动进行相关的提示。 4 CREATE TRIGGER [触发器名字] ON 表名 FOR INSERT(插入)|DEL...
  • winggyn
  • winggyn
  • 2013年05月14日 13:51
  • 1212

【SQL Server】SQL2005的安装与配置、简单使用

印象中,以前电脑不发达,自身编程经历不多的时候,由于Microsoft SQL Server版本众多,在不同版本的windows下必须要求装相应版本的SQL Server,否则有可能出现兼容性的问题,...
  • yongh701
  • yongh701
  • 2015年12月29日 20:30
  • 7789
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL Server 2005 中的DDL触发器应用
举报原因:
原因补充:

(最多只允许输入30个字)