大家好:
我的触发器中有一块远程操作,我希望当这块远程操作执行失败时在本地数据库中进行另一个操作,同时不会滚原来对于触发器所在表的DML操作,
于是我在该远程操作之前设置了SAVE TRANSACTION remote,当远程操作失败时Rollback TRANSACTION remote.
但是这样本地事务(触发器默认事务)则无法提升为分布式事务了(报错:无法将此事务提升为分布式事务,因为在此事务中有活动的保存点。)
请问大家有什么好的解决方法?
我的触发器中有一块远程操作,我希望当这块远程操作执行失败时在本地数据库中进行另一个操作,同时不会滚原来对于触发器所在表的DML操作,
于是我在该远程操作之前设置了SAVE TRANSACTION remote,当远程操作失败时Rollback TRANSACTION remote.
但是这样本地事务(触发器默认事务)则无法提升为分布式事务了(报错:无法将此事务提升为分布式事务,因为在此事务中有活动的保存点。)
请问大家有什么好的解决方法?
COMMIT TRAN;然后再开事务做后面的操作就没问题了
http://topic.csdn.net/u/20090109/12/23667bef-de1f-455f-94d4-759c0d20b640.html?seed=1998397327
我试过提交触发器本身的事务,然后另启一个新事务的方式。
但是报错:“其他会话正在使用事务的上下文。”
我的代码如下:......
WHILE @@TRANCOUNT > 0
COMMIT TRAN;
BEGIN TRAN
INSERT INTO [192.168.100.89].aaa.dbo.BBB(ID) values(1) --192.168.100.89不连通(即该句会失败)
IF @@Error <> 0
BEGIN
ROLLBACK TRAN
print 'error'
END
COMMIT TRAN
END并且未打印出error
就是希望执行回滚事务,然后执行个本地操作(这里是打印error)。
可是在执行的时候却报:“其他会话正在使用事务的上下文。”并且未打印出error,这点我不太明白。