如果我没有在SQL Server中使用begin transaction,如何回滚?

时间:2014-01-30 07:25:26

标签: sql-server sql-server-2008

我有一个像这样的SQL查询:

update Staff 
set staff_Name = 'jas' 
where staff_id = 7

我没有使用任何begin transaction,我只是执行此查询。

在这种情况下,有没有办法回滚?

2 个答案:

答案 0 :(得分:1)

是的,您可以使用隐式交易来实现此目的。 试试这个...

SET IMPLICIT_TRANSACTIONS ON

update Staff set staff_Name='jas' where staff_id=7

ROLLBACK

根据您的要求 - 您可以通过将该存储过程设置为启动过程,从存储过程设置此设置(SET IMPLICIT_TRANSACTIONS ON)。但SET IMPLICIT TRANSACTION ON命令是特定于连接的。因此,除了运行启动存储过程的连接之外的任何连接都不会受益于您设置的设置。

答案 1 :(得分:1)

如果您还没有启动事务,则回滚查询是不可能的,抱歉。

只有在备份数据库时才能恢复数据。

对于将来,使用SET IMPLICIT_TRANSACTIONS ON命令使用隐式事务可能是个好主意。

另外,你应该看看SSMS Tools。它们提供了简洁的功能 - 自动将事务语句放在每个新的查询编辑器中,这样您就不会忘记使用隐式事务。