手机
当前位置:查字典教程网 >编程开发 >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中的外联结用法

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

SQL Server 临时表的删除

SQL Server常用管理命令小结

SQLServer 设置单词首字母大写

SQL Server 存储过程解析

SQL Server2008导出数据生成文件

SQL Server 2008 R2 应用及多服务器管理

SQL Server 不删除信息重新恢复自动编号列的序号的方法

精品推荐
分类导航