新闻动态
新闻动态
NEWS INFORMATION

SQL Server误区30日谈 第4天 DDL触发器就是INSTEAD OF触发器

发布日期:2022-01-08 13:50 | 文章来源:gibhub

误区 #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)”。

版权声明:本站文章来源标注为YINGSOO的内容版权均为本站所有,欢迎引用、转载,请保持原文完整并注明来源及原文链接。禁止复制或仿造本网站,禁止在非www.yingsoo.com所属的服务器上建立镜像,否则将依法追究法律责任。本站部分内容来源于网友推荐、互联网收集整理而来,仅供学习参考,不代表本站立场,如有内容涉嫌侵权,请联系alex-e#qq.com处理。

实时开通

自选配置、实时开通

免备案

全球线路精选!

全天候客户服务

7x24全年不间断在线

专属顾问服务

1对1客户咨询顾问

在线
客服

在线客服:7*24小时在线

客服
热线

400-630-3752
7*24小时客服服务热线

关注
微信

关注官方微信
顶部