如果存在这种情况,我会感到惊讶,但以防万一。是否有某种机制允许一项交易影响另一项(外部)交易?例如:
开始尝试 开始交易 -- 运行更新 01 INSERT INTO dbo.Log (Text) VALUES ('Updates 01 - big success'); -- 运行更新 02 INSERT INTO dbo.Log (Text) VALUES ('Updates 02 - big success'); - 等等... 犯罪 结束尝试 开始接球 回滚 INSERT INTO dbo.Log (Text) VALUES ('在某个步骤出现问题:' + ERROR_MESSAGE()); 结束捕捉
当然,在发生错误的情况下,我们会丢失在事务内完成的成功日志条目,并且只留下回滚发生后插入的最后一条(错误)消息。有没有办法在事务完成之前使这些 INSERT INTO dbo.Log 语句“持久化”?我想,如果是的话,它会在适当的事务控制面前飞翔,所以我在某种程度上希望这不存在,但也许在技巧类别的某个地方?
谢谢你。
假设他们在同一个会话中运行,不,正如您已经说过的那样。有解决办法吗?当然,通过使用激活的存储过程将消息放入服务代理队列中,将其从该会话中移除。我不太确定的唯一部分是 raiserror 的 WITH LOG 部分是否受此约束——尽管您可能不想将结果写入错误日志。
它也可以缩短,以便每个部分都是自己的事务,但这可能不适合您的需要。