有没有一种方法可以在没有 ROLLBACK 的情况下回滚到事务的先前状态BEGIN TRANSACTION
?
delete from table1;
ROLLBACK
信息:
ROLLBACK TRANSACTION 请求没有对应的 BEGIN TRANSACTION。
任何输入都会有很大帮助。
谢谢 !!!
有没有一种方法可以在没有 ROLLBACK 的情况下回滚到事务的先前状态BEGIN TRANSACTION
?
delete from table1;
ROLLBACK
信息:
ROLLBACK TRANSACTION 请求没有对应的 BEGIN TRANSACTION。
任何输入都会有很大帮助。
谢谢 !!!
要在明确设置 IMPLICIT_TRANSACTIONS ON 时扩展 gerrytans 答案,可以使用 ROLLBACK。请参阅与此相关的MSDN 文档。请注意,这不是默认的自动提交事务模式。
这使我可以运行如下语句;
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
正如 SQL 服务器错误告诉你的那样——不,你不能。很多人会很好奇,你为什么首先想要这个。
请记住,SQL Server 有一个隐式事务——即对于您在没有显式 BEGIN TRAN 的情况下发出的 DML,SQL Server 将在屏幕后面为您启动和完成一个事务。
ROLLBACK 的一个常见用途是用于错误处理。如果在事务中间的某个地方您意识到由于用户输入错误或其他原因而无法继续进行 - 那么合理的操作是 ROLLBACK 以返回起点
可能发生的最糟糕的事情是将您的数据状态留在“中间的某个地方”。
您必须有一个BEGIN TRANSACTION
才能使用该ROLLBACK
命令。你不能回到以前的状态。