如何在不使用事务的情况下回滚删除命令

时间:2013-03-18 08:53:34

标签: sql-server-2012 truncate

如何在不使用事务的情况下回滚删除命令?如果我们不能,那么Truncate& amp;删除?

3 个答案:

答案 0 :(得分:3)

在这种情况下您无法回滚,但在使用完整恢复模型时,您可以将数据库恢复到发出删除命令之前的那一刻。

答案 1 :(得分:2)

没有交易,您无法ROLLBACK进行操作。您可以使用implicit transactions,但仍需要明确调用COMMITROLLBACK。但是,为了更好地控制,最好将语句包装在BEGIN TRANSACTION...COMMIT / ROLLBACK块中。这样您就可以避免任何混淆,并且需要使用IMPLICIT_TRANSACTION设置。

答案 2 :(得分:2)

当且仅当它们是尚未提交的事务的一部分时,您才可以回滚DELETE或TRUNCATE(以及大多数其他操作)。或者,您可以从备份中恢复已删除/截断的数据。

TRUNCATE和DELETE之间存在一些差异。最值得注意的是TRUNCATE只能清空一个表,而DELETE只删除你指定的行。 TRUNCATE在页面级别而不是行级别释放和记录数据,这通常使TRUNCATE比DELETE更有效地删除表格的整个内容。