DDL触发器 DDL Triggers
SQL Server 2005可以就整个服务器或数据库的某个范围为DDL事件定义触发器。也可以为单个DDL语句(例如:CREAT_TABLE、DROP_TABLE等)或者为一组语句(例如:指定DDL_DATABASE_LEVEL_EVENTS想要触发器触发数据库所有DDL事件)定义DDL触发器。
在DDL触发器内部,可以通过访问eventdata()函数获得与激发该触发器的事件有关的数据。该eventdata()函数返回有关事件的xml数据。
DDL触发器特别有用的方案包括DDL更改的完整性检查、审核方案以及其他方案。
代码演示:
USE demo GO CREATE TRIGGER prevent_drop_table ON DATABASE FOR DROP_TABLE AS RAISERROR('没有删除表的权限.', 10, 1) PRINT '尝试在数据库' + DB_NAME() + '中删除表.' PRINT CONVERT (nvarchar (1000),EventData()) ROLLBACK GO -- 测试 CREATE TABLE TestDROP(col1 INT) GO INSERT INTO TestDROP VALUES(1) DROP TABLE testdrop -- Server CREATE TRIGGER audit_ddl_logins ON ALL SERVER FOR CREATE_LOGIN, ALTER_LOGIN, DROP_LOGIN AS PRINT '发生DDL LOGIN.' PRINT CONVERT (nvarchar (1000),EventData()) GO -- 测试 CREATE LOGIN login1 WITH PASSWORD = '123' ALTER LOGIN login1 WITH PASSWORD = 'xyz' DROP LOGIN login1 |
总结
SQL Server 2005中的Transaction-SQL增强功能提高了用户在编写查询时的表达能力,使用户可以改善代码的性能,并且扩充了错误处理能力。SQL Server 2005 在Transaction-SQL上所做的改进反映了其更好地满足了ANSI-99 SQL规范的要求以及客户的需求。在Transaction-SQL和托管代码之间的选择。