手机
当前位置:查字典教程网 >编程开发 >mssql数据库 >SQL Server误区30日谈 第4天 DDL触发器就是INSTEAD OF触发器
SQL Server误区30日谈 第4天 DDL触发器就是INSTEAD OF触发器
摘要:误区#4:DDL触发器(SQLServer2005之后被引入)就是INSTEADOF触发器这是错误的DDL触发器的实现原理其实就是一个AFT...

误区 #4: DDL触发器(SQL Server 2005之后被引入)就是INSTEAD OF触发器

这是错误的

DDL触发器的实现原理其实就是一个AFTER触发器。这个意思是先发生DDL操作,然后触发器再捕捉操作(当然如果你在触发器内写了Rollback,则也可能回滚)。

存在Rollback也意味着这个触发器并不像你想象的那么轻量,来看下面的例子:

ALTER TABLE MyBigTable ADD MyNewNonNullColumn VARCHAR (20) DEFAULT 'Paul'

如果存在一个defined for ALTER_TABLE事件的DDL触发器,或是一个更宽泛的事件比如DDL_TABLE_EVENTS。上面那个DDL代码将会对表中每一行数据加进新列,之后触发触发器操作。如果你的触发器中存在回滚来阻止DDL操作发生,那么这个代价可不小(不信的话你自己看看这么做后产生的日志)。

当然更好的办法是对ALTER设置GRANT或是DENY权限,或是仅仅允许通过你创建的存储过程进行DDL操作。

但不管怎么样,虽然DDL触发器可以达到禁止DDL的操作的目的,但代价昂贵。而DDL触发器的好处是允许记录某些人做了某些修改表之类的操作,所以我并不是说不允许DDL触发器,而是要小心使用。

Kimberly有一篇非常好的关于DDL触发器的博文:"EXECUTE AS" and an important update your DDL Triggers (for auditing or prevention)”。

【SQL Server误区30日谈 第4天 DDL触发器就是INSTEAD OF触发器】相关文章:

SQL Server压缩日志及数据库文件大小

SQL Server 2005删除日志文件的几种方法小结

SQL2005行触发器

SQL Server 存储过程解析

SQL Server 清空删除日志

SQL Server 使用 SET FMTONLY ON 获得表的元数据

SQLServer 连接异常与解决方法小结

SQL Server 数据库清除日志的方法

SQL Server常用管理命令小结

SQL Server 工作技巧

精品推荐
分类导航