SQL Server:没有BEGIN TRANSACTION的回滚

时间:2013-01-23 05:02:55

标签: sql sql-server sql-server-2008 sql-server-2005

有没有办法可以在没有BEGIN TRANSACTION的情况下使用ROLLBACK回滚到以前的事务状态?

delete from table1;
ROLLBACK

消息:

  

ROLLBACK TRANSACTION请求没有相应的BEGIN TRANSACTION。

任何输入都会有很大的帮助。

谢谢!!!

3 个答案:

答案 0 :(得分:5)

要在明确设置IMPLICIT_TRANSACTIONS ON时扩展gerrytans应答,可以使用ROLLBACK。请参阅与此相关的MSDN doco。请注意,这不是默认的autocommit transaction mode

这允许我运行像;

这样的语句
SET IMPLICIT_TRANSACTIONS ON

INSERT INTO my_table (item_type, start_date_time)
VALUES ('TEST', CURRENT_TIMESTAMP)

ROLLBACK

-- Shouldn't return the 'TEST' value inserted above.
SELECT * FROM my_table ORDER BY start_date_time DESC 

答案 1 :(得分:4)

由于SQL服务器错误告诉你 - 不,你不能。很多人会很好奇你为什么要这样做呢。

请记住SQL服务器有一个隐式事务 - 对于没有显式BEGIN TRAN的DML,SQL服务器将在屏幕后面为您启动和完成事务。

ROLLBACK的常见用法是用于错误处理。如果在交易过程中的某个地方你意识到由于用户输入不当或其他原因你无法继续前进 - 那么合理的行动是让ROLLBACK返回起点

可能发生的最糟糕的事情是让你的数据处于中间位置。

答案 2 :(得分:2)

您必须拥有BEGIN TRANSACTION才能使用ROLLBACK命令。你不能回到以前的状态。