情况是这样的,公司的逻辑是在触发器中做一堆事情,然后最后成功或者回滚
我在这些逻辑中会通过一个公用sp记录很多的日志信息到一张审计表,可是万一最后触发器回滚了,我记录的那些信息也都被回滚了。
sqlserver没有自治事务的概念,google了下,方案是用CLR来实现,感觉有点复杂,能不能有简单的在T-SQL级别能搞定的方案?
比如用Service Broker之类的异步消息件能实现么? 或者别的方法,谢谢大家。
我在这些逻辑中会通过一个公用sp记录很多的日志信息到一张审计表,可是万一最后触发器回滚了,我记录的那些信息也都被回滚了。
sqlserver没有自治事务的概念,google了下,方案是用CLR来实现,感觉有点复杂,能不能有简单的在T-SQL级别能搞定的方案?
比如用Service Broker之类的异步消息件能实现么? 或者别的方法,谢谢大家。
而且我想实现的是即使我的记录日志的sp是在触发器的begin tran 和 rollback之间的时候,我也能够成功的记录下我想要的调试信息,就是类似自治事务的概念了。
目前只google到了CLR的方法,感觉有点复杂,不知道有没有别的方法呢?
是的,我之前几乎不用触发器,可是现在代码框架就是这样,逼的我不得不去在触发器里面想一些绕过去的点子。想要彻底的弃用触发器,短期内几乎是不可能的....
触发器本身就是一个事务。 如果不论触发器是否正确执行,均需进行记录的话。LZ可以考虑前台做处理。而无须在触发器中处理。如果需要用自治事务方式处理的话,LZ可以用begin trans D1
begin trans G1
记录日志处理
end trans G1 begin trans T1
触发器中处理的那一堆 失败 rollback trans T1
end trans T1end trans D1
其实我本意是想实现sqlserver的自治事务,可以确保我的记录日志的信息不会因为外层的事务回滚而也消失。
2008已经有方法实现了,可是2005除了CLR好像还么google到好的方案。