截断交易中的表格

时间:2009-10-05 23:36:03

标签: sql sql-server sql-server-2005 transactions truncate

可以在事务中使用SQL“truncate table”命令吗?我正在创建一个应用程序,我的表有大量的记录。我想删除所有记录,但如果应用程序失败,我将回滚我的事务。删除每条记录需要很长时间。我想知道我是否使用截断表,我是否仍然可以回滚事务并在发生故障时恢复数据。我意识到truncate table不会将每个删除写入事务日志,但我想知道它是否将页面释放写入日志以便回滚工作。

2 个答案:

答案 0 :(得分:50)

在SQL Server中,您可以从事务中回滚TRUNCATE。正如您所提到的,它确实将页面释放写入日志。

答案 1 :(得分:15)

在Oracle中,TRUNCATE TABLE是一个DDL语句,不能在事务中使用(或者更准确地说,不能回滚)。 AFAIK,如果在执行语句时正在进行事务,则提交事务,然后执行TRUNCATE且无法撤消。

在Informix中,TRUNCATE的行为略有不同;您可以在事务中使用TRUNCATE,但在此之后允许的唯一语句是COMMIT和ROLLBACK。

其他DBMS可能对TRUNCATE TABLE的行为有自己的特殊解释。