2013-03-18 40 views
5

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

+2

我们在这里谈论哪个平台? – 2013-03-18 08:54:50

+0

没有足够的信息给出。 – bot 2013-03-18 09:03:39

+0

正在编写SQL Server 2012中的代码。 – 2013-03-18 09:08:55

回答

2

您不能在没有交易的情况下运行ROLLBACK。您大概可以使用implicit transactions,但您仍需要明确呼叫COMMITROLLBACK。但是,为了更好的控制,最好将语句包装在BEGIN TRANSACTION...COMMIT/ROLLBACK区块中。这样可以避免任何混淆,并且需要使用IMPLICIT_TRANSACTION设置。

2

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

TRUNCATE和DELETE之间有几个区别。最值得注意的是TRUNCATE只能清空一个表,而DELETE只能删除你指定的行。 TRUNCATE在页面级别而不是行级别取消分配和记录数据,这通常使TRUNCATE成为比DELETE更有效的方法,用于删除表格的全部内容。

+2

如果他正在使用**完全恢复模式**,那么他可以将数据库恢复到发出删除命令之前的那一刻。 – 2015-07-03 21:35:51

3

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

相关问题