【问题标题】:Logging inside the trigger在触发器内记录
【发布时间】:2012-06-12 16:40:05
【问题描述】:

我正在尝试编写 SQL Server 2000 触发器。

对于每一个插入语句,我都想将插入的值记录到一个日志表中,然后做一些处理。处理失败时如何防止日志记录被回滚?

看来我需要一个内部自治事务来将日志记录放入其中。在 SQL Server 2000 上使用 T-SQL 是否可行?

我希望实现不会造成太多开销。或者如果处理失败,我该如何优雅地管理它并且不让它回滚原始插入。谢谢

【问题讨论】:

    标签: tsql triggers sql-server-2000


    【解决方案1】:

    我强烈建议不要在触发器中进行任何类型的处理。

    您无法控制触发触发器的时间和频率 - 因此,请确保您的触发器非常精简 - 最多将一行(或几行)插入“审核”或“要处理的作业”表中,作为以后处理的“标记”。但实际上不要在触发器中开始/执行处理。

    单独处理实际处理,例如使用SQL 代理作业或其他东西。由于这将独立于您的原始语句运行,因此“嵌套”事务和类似的东西也不会有任何问题。

    【讨论】:

    • ,感谢您的建议。关于如何捕获所有尝试修改某个表的数据的事件的任何建议,即使尝试失败。
    • 错误的开始假设...确保触发器永远不会失败。触发器中的错误实际上导致无法更新/插入/删除数据。所以...如果您想将日志记录为进程,则日志使记录和处理独立。从触发器内填充日志(这是保证日志始终完成的地方),然后或处理基于时间的日志或查看服务代理(从触发器内发送消息)。后者将 AND 保证不雅并保证立即处理。
    猜你喜欢
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    相关资源
    最近更新 更多