在触发器内部记录日志

3
我正在尝试编写一个SQL Server 2000触发器。对于每个插入语句,我想将插入的值记录到日志表中,然后进行一些处理。如何防止在处理失败时回滚日志记录?似乎我需要一个内部自主事务来将日志记录放入其中。在SQL Server 2000上使用T-SQL可以实现吗?我希望实现不会造成太多开销。如果处理失败,如何优雅地管理它并使其不回滚原始插入。谢谢。
1个回答

2

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

你无法控制触发器何时以及多频繁地触发,因此,请确保你的触发器非常简洁 - 最多只插入一行(或几行)到一个“审核”或“待处理作业”表中,作为以后处理的“标记”。但是不要在触发器中直接开始/执行处理过程。

使用例如 SQL Agent 作业之类的方式单独处理实际处理。由于它将独立于原始语句运行,因此您也不会遇到“嵌套”事务等问题。


感谢您的建议。请问有关于如何捕获所有试图修改某个表的数据事件的建议吗,即使尝试失败也能捕获到? - Andrew
错误的起始假设... 请确保触发器永远不会失败。 触发器中的错误实际上使更新/插入/删除数据变得不可能。 因此...如果您想记录并处理日志,请使记录和处理独立。 从触发器内部填充日志(那是保证始终进行记录的地方),然后基于时间处理日志,或者查看服务代理(在触发器内发送消息)。 后者将保证独立性和即时处理。 - Paul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接