在SQL中回滚嵌套事务抛出错误

时间:2012-08-05 23:38:07

标签: sql sql-server-2008 tsql transactions

以下是我想要实现的内容的片段。我有一个嵌套的事务'tran2',我无法回滚

SELECT 'Before', * FROM [table] WHERE field ..

BEGIN TRAN tran1
UPDATE [table] set field ... WHERE field ..

 BEGIN TRAN tran2
    SELECT 'During', * FROM [table] WHERE field ..
    select @@trancount as 'transactioncount'

  rollback tran tran2

rollback TRAN tran1
SELECT 'After', * FROM [table] WHERE field ..

给我这个错误

  

Msg 6401,Level 16,State 1,Line 13
  无法回滚tran2。没有找到该名称的交易或保存点。

然而@@trancount在那时给了我2笔交易

1 个答案:

答案 0 :(得分:3)

而不是begin trans tran2,请使用save transaction tran2

这会在外部事务中创建一个保存点,您可以回滚到该保存点。