您现在的位置是:网站首页> 编程资料编程资料
SQL Server误区30日谈 第4天 DDL触发器就是INSTEAD OF触发器_MsSql_
2023-05-26
550人已围观
简介 SQL Server误区30日谈 第4天 DDL触发器就是INSTEAD OF触发器_MsSql_
误区 #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日谈 第3天 即时文件初始化特性可以在SQL Server中开启和关闭_MsSql_
- SQL Server误区30日谈 第2天 DBCC CHECKDB会导致阻塞_MsSql_
- SQL Server误区30日谈 第1天 正在运行的事务在服务器故障转移后继续执行_MsSql_
- 浅谈SQL Server中的三种物理连接操作(性能比较)_MsSql_
- sqlserver获取各种形式的时间_MsSql_
- mssql关于一个表格结构的另外一种显示(表达意思不变)_MsSql_
- sqlserver中遍历字符串的sql语句_MsSql_
- 数据库性能优化一:数据库自身优化提升性能_MsSql_
- 数据库性能优化二:数据库表优化提升性能_MsSql_
- 数据库性能优化三:程序操作优化提升性能_MsSql_
