误区4:# DDL触发器(SQL Server 2005推出后)是一种替代触发器

错了。



对DDL触发器实现的原理实际上是一个触发后。这意味着DDL操作首先发生,然后将触发捕获运行(当然,如果你写回滚的触发,也可以回滚)。

回滚的存在也意味着触发器不像您想象的那么轻,并看下面的例子:

修改表mybigtable添加mynewnonnullcolumn varchar(20)default'paul

If there is a DDL trigger for a defined for ALTER_TABLE event, or a more broad event, such as DDL_TABLE_EVENTS.The above DDL code will add a new column to each row of the table in the table, then trigger the trigger operation.If there is a rollback in your trigger to prevent the DDL operation from happening, the cost is not small.

当然,更好的办法是建立授予或拒绝权限的改变,或只允许DDL操作是通过存储过程创建完成。

但在任何情况下,虽然可以实现禁止DDL触发器DDL操作的目的,这是昂贵的。利用DDL触发器是让一些人做一些修改表等操作。所以我不是说DDL触发器是不允许的,但我们应该小心使用它。

金佰利有一个非常好的博客:DDL触发器执行的重要更新你的DDL触发器。