SQL Server 2005 中 DDL 触发器的实现
在 sql server 2000 中,只能为针对表发出的 DML 语句( INSERT 、 UPDATE 和 DELETE )定义 AFTER 触发器。 SQL Server 2005 可以就整个服务器或数据库的某个范围为 DDL 事件定义触发器。可以为单个 DDL 语句(例如, CREATE_TABLE )或者为一组语句(例如, DDL_DATABASE_LEVEL_EVENTS )定义 DDL 触发器。在该触发器内部,您可以通过访问 eventdata() 函数获得与激发该触发器的事件有关的数据。该函数返回有关事件的 XML 数据。每个事件的架构都继承了 Server Events 基础架构。
介绍:
触发器是特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用户不能直接调用他们。
功能:
1 、 允许 / 限制对服务、数据库、表的某些操作
2 、 自动生成派生列,比如自增字段
3 、 强制数据一致性
4 、 提供审计和日志记录
5 、 防止无效的事务处理
6 、 启用复杂的业务逻辑
实例
1、创建表触发器
create trigger aaa on aa
for insert
as
print ('success inserted one row')
CREATE TRIGGER delete_on_Table
ON bb
FOR delete
AS
PRINT 'You are not allowed to delete TABLE'
ROLLBACK;
2、创建服务器触发器
CREATE TRIGGER STOP_DDL_on_Table_and_PROC
ON ALL SERVER
FOR
CREATE_DATABASE,ALTER_DATABASE,DROP_DATABASE
AS
PRINT 'You are not allowed to CREATE,ALTER and DROP any Databases'
ROLLBACK;
disable TRIGGER STOP_DDL_on_Table_and_PROC ON ALL SERVER
3、创建数据库触发器
CREATE TRIGGER STOP_DDL_on_Table_and_PROC
ON DATABASE
FOR
CREATE_TABLE, DROP_TABLE, ALTER_TABLE,
CREATE_PROCEDURE, ALTER_PROCEDURE,DROP_PROCEDURE
AS
SELECT EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]', 'nvarchar(max)')
PRINT 'You are not allowed to CREATE,ALTER and DROP any Tables and Procedures'
ROLLBACK;
disable TRIGGER STOP_DDL_on_Table_and_PROC ON DATABASE --禁用
enable TRIGGER STOP_DDL_on_Table_and_PROC ON DATABASE --启用
use QQ
CREATE TABLE MYTABLE2(ID INT, NAME VARCHAR(100))
select * from MYTABLE2