【问题标题】:How to disable the triggers in SQL Server 2012 across session如何跨会话禁用 SQL Server 2012 中的触发器
【发布时间】:2017-06-10 09:28:53
【问题描述】:

正在运行一个 SQL 作业,在该作业中禁用特定数据库中所有表的触发器。但是很少有触发器通过从应用程序/网络服务运行的不同脚本再次启用。如何确保在 SQL 作业完成之前不会启用触发器?

【问题讨论】:

    标签: sql triggers sql-server-2012


    【解决方案1】:

    听起来您希望一个 session 不受触发器活动的影响,而不是在该会话运行时禁用触发器(这将禁用所有会话)。如果是这种情况,并且可以重写,我建议使用上下文信息。

    你所做的是,在应该免疫的会话中,你设置一个特定的上下文值,例如:

    SET CONTEXT_INFO 0x53494C4C59
    

    然后,在您的触发器中,在执行任何其他操作之前,检查并退出:

    IF CONTEXT_INFO() = 0x53494C4C59
    BEGIN
        RETURN
    END
    

    请注意,这适合作为一种安全措施 - 它依赖于任何人,可能是恶意的,在任何其他不适合的会话中使用“魔法,禁用触发器”值设置他们的上下文信息合适。

    【讨论】:

    • 谢谢达米恩!!将尝试此选项。这个上下文值代表什么吗?或者它只是一个随机数,我可以使用任何数字?
    • @RajeshBhat - 你可以使用任何数字。我通常会想出一些文本,然后将其转换为二进制。例如select CONVERT(varbinary(128),'SILLY') - 但你可能想要更合适/更独特的东西。
    猜你喜欢
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2011-04-05
    • 2016-06-04
    相关资源
    最近更新 更多