【发布时间】:2017-06-10 09:28:53
【问题描述】:
正在运行一个 SQL 作业,在该作业中禁用特定数据库中所有表的触发器。但是很少有触发器通过从应用程序/网络服务运行的不同脚本再次启用。如何确保在 SQL 作业完成之前不会启用触发器?
【问题讨论】:
标签: sql triggers sql-server-2012
正在运行一个 SQL 作业,在该作业中禁用特定数据库中所有表的触发器。但是很少有触发器通过从应用程序/网络服务运行的不同脚本再次启用。如何确保在 SQL 作业完成之前不会启用触发器?
【问题讨论】:
标签: sql triggers sql-server-2012
听起来您希望一个 session 不受触发器活动的影响,而不是在该会话运行时禁用触发器(这将禁用所有会话)。如果是这种情况,并且可以重写,我建议使用上下文信息。
你所做的是,在应该免疫的会话中,你设置一个特定的上下文值,例如:
SET CONTEXT_INFO 0x53494C4C59
然后,在您的触发器中,在执行任何其他操作之前,检查并退出:
IF CONTEXT_INFO() = 0x53494C4C59
BEGIN
RETURN
END
请注意,这不适合作为一种安全措施 - 它依赖于任何人,可能是恶意的,在任何其他不适合的会话中使用“魔法,禁用触发器”值设置他们的上下文信息合适。
【讨论】:
select CONVERT(varbinary(128),'SILLY') - 但你可能想要更合适/更独特的东西。