我在A表定义了一个Insert触发器,要求如下:
如果有数据插入A表,解析插入的纪录,然后依次更新B表、C表、D表(总之逻辑比较复杂)
我定义了一个事务,如果更新B表、C表、D表时有一处出错,就在Catch 语句中回滚事务不幸的是:插入A表的那条纪录也被 Rollback了,而我需要保留这条数据!请高人指点!谢谢先PS:我调查过,触发器为一隐式事务,那么说如果我要保留A表插入的数据就不能使用 Rollback了吗?不使用的话我又如何保证B、C、D表的同时提交?
如果有数据插入A表,解析插入的纪录,然后依次更新B表、C表、D表(总之逻辑比较复杂)
我定义了一个事务,如果更新B表、C表、D表时有一处出错,就在Catch 语句中回滚事务不幸的是:插入A表的那条纪录也被 Rollback了,而我需要保留这条数据!请高人指点!谢谢先PS:我调查过,触发器为一隐式事务,那么说如果我要保留A表插入的数据就不能使用 Rollback了吗?不使用的话我又如何保证B、C、D表的同时提交?
Begin Tran
/*A组语句序列*/
Save Tran Save_Point
/*B组语句序列*/
if @@Error<>0 --注意@@Error为0时表示未出错
RollBack Tran Save_Point
/*仅回退B组语句序列*/
Commit Tran
/*提交A组语句,且若未回退B组语句则B组语句*/
Insert Into A Select ......
Save Tran Save_Point
Update B ...
Update C ...
Update D ...
if @@Error<>0
Begin
RollBack Tran Save_Point
Print '更新失败'
End
Else
Commit Tran
错误提示:
当前事务无法提交,而且无法回滚到保存点。请回滚整个事务
-------------------------------------------------------
给出你的代码看看...
但是错误信息的提示显示似乎SQLServer并不支持这样的操作
一样感谢你的解答!