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

相关文章推荐

SQL Server DDL触发器运用

一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents)背景(Contexts)基础知识(Rudimentary Knowledge)DDL运用场景(DDL Scene)补...

SQL Server 2005 中实现通用的异步触发器架构收藏

在SQL Server 2005中,通过新增的Service Broker可以实现异步触发器的处理功能。本文提供一种使用Service Broker实现的通用异步触发器方法。 在本方法中,通过Ser...

SQL Server 2005 用触发器跟踪表操作

--> 测试数据:[a] if object_id('[a]') is not null drop table [a] go create table [a]([ID] int,[品名] varch...

SQL Server 2005 学习笔记之触发器简介[转]

触发器实际上就是一种特殊类型的存储过程,其特殊性表现在:它是在执行某些特定的T-SQL语句时自动的。 11.1  触发器简介 触发器实际上就是一种特殊类型的存储过程,它是在执行某些特定的T-SQL...
  • wxzyq
  • wxzyq
  • 2011-08-30 19:46
  • 255

SQL Server 2005 学习笔记之触发器简介[转]

触发器实际上就是一种特殊类型的存储过程,其特殊性表现在:它是在执行某些特定的T-SQL语句时自动的。 11.1  触发器简介 触发器实际上就是一种特殊类型的存储过程,它是在执行某些特定的T-SQL...

sql server 2005学习笔记之触发器简介(一)

触发器实际上就是一种特殊类型的存储过程,其特殊性表现在:它是在执行某些特定的T-SQL语句时自动的。11.1  触发器简介触发器实际上就是一种特殊类型的存储过程,它是在执行某些特定的T-SQL语句时自...

sql server 2005学习笔记之触发器简介

触发器实际上就是一种特殊类型的存储过程,其特殊性表现在:它是在执行某些特定的T-SQL语句时自动的。11.1  触发器简介触发器实际上就是一种特殊类型的存储过程,它是在执行某些特定的T-SQL语句时自...

SQL Server 2005 中实现通用的异步触发器架构

在SQL Server 2005中,通过新增的Service Broker可以实现异步触发器的处理功能。本文提供一种使用Service Broker实现的通用异步触发器方法。 在本方法中,通过S...

SQL Server 2005的DML触发器

SQL Server 2005的DML触发器分为两类:

如何查看SQL Server 2005使用with encryption 加密的存储过程或触发器,函数

如何查看SQL Server 2005使用with encryption 加密的存储过程或触发器,函数首先打开 Microsoft SQL Server Manage Studio,不要登陆,关闭对话...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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