日期:2014-05-17  浏览次数:20453 次

有没有记录事务的方法
我写一个程序,点一下“执行”按钮后,就对数据库进行比较复杂的操作。这个操作是用事务保护的,一旦中间出错,就回滚,同时汇报用户操作有问题。

一般的程序都是这样。

我的程序还有另外一个按钮“撤回”。就是把刚才的“执行”按钮做的事情都撤销。这个更复杂,因为要撤销一些批量修改的数据。

我想,能不能在操作“执行”按钮是,把这个事务内容保存到数据里。那么等到点撤销的时候,一句 XX事务.ROLLBACK 就OK了,多好。

------解决方案--------------------
等到有一天,楼主终于明白了关系型数据库事务的事事非非,就会突然大彻大悟,这样是不行滴……
举个例子:事务1已完成(A点了一下按钮),事务2已完成(B又点了一下按钮),这时你想撤销事务1,不好办了……
------解决方案--------------------
你这个即使能做出来,你的应用也不能支持并发操作,不是阻塞就是死锁。还是让sqlserver来保护你的事务吧
------解决方案--------------------
看一下:SAVE TRANSACTION 
A user can set a savepoint, or marker, within a transaction. The savepoint defines a location to which a transaction can return if part of the transaction is conditionally canceled. If a transaction is rolled back to a savepoint, it must proceed to completion with more Transact-SQL statements if needed and a COMMIT TRANSACTION statement, or it must be canceled altogether by rolling the transaction back to its beginning. To cancel an entire transaction, use the form ROLLBACK TRANSACTION transaction_name. All the statements or procedures of the transaction are undone.

不过非常不建议你这样做,可能导致非常严重的性能问题。
------解决方案--------------------
⊙﹏⊙b汗,完全不是一样,你那个是相当于事务都已经成功执行了,虽然你把这个事务保存起来了,那也无法回滚撤销了。