Sql server 禁用触发器时触发触发器

Sql server 禁用触发器时触发触发器,sql-server,triggers,ddl-trigger,Sql Server,Triggers,Ddl Trigger,有一个安全触发器可以阻止生产数据库实例上的所有SQL DDL事件(ALTER/DROP/CREATE等) 对于部署,您需要执行禁用触发器,然后在完成后执行启用触发器 我希望在禁用/启用安全触发器时通知操作员(EXEC sp\u notify\u Operator…)。它们看起来不是,我也不能在sys.triggers上添加更新/删除触发器。有什么想法吗?因为您已经被“保护”了,可以说是被执行的DDL语句保护了,所以您可以添加另一个数据库触发器来查找调用过程通知操作员的DDL事件。不过,您可能需要

有一个安全触发器可以阻止生产数据库实例上的所有SQL DDL事件(ALTER/DROP/CREATE等)

对于部署,您需要执行
禁用触发器
,然后在完成后执行
启用触发器

我希望在禁用/启用安全触发器时通知操作员(
EXEC sp\u notify\u Operator…
)。它们看起来不是,我也不能在
sys.triggers
上添加更新/删除触发器。有什么想法吗?

因为您已经被“保护”了,可以说是被执行的DDL语句保护了,所以您可以添加另一个数据库触发器来查找调用过程通知操作员的DDL事件。不过,您可能需要另一个管理层—可能需要对通知进行排队—这样它就不会变得太垃圾。我可以想象变革正在铺开,收到100多封电子邮件通知……真恶心

CREATE TRIGGER DatabaseDDLNotices
ON DATABASE FOR DDL_DATABASE_LEVEL_EVENTS
AS BEGIN
  -- place something into a queue to be batched later
END;

在我看来,这还有一个很好的副作用,就是将通知逻辑和DDL预防逻辑分开。

是的,这是一个有趣的想法。我想你不能在
{EN,DIS}ABLE trigger
上设置触发器的事实必须是经过设计的-否则你可能会让SQL server进入一个非常糟糕的状态,你不能离开,因为触发器会破坏你所做的一切,包括修复触发器的尝试。2008年,这个解决方案有一个问题