如何检索截断记录(SQL Server)。可行吗?

时间:2018-09-15 18:16:40

标签: sql-server

我正在获取有关“截断V”的更多详细信息。删除。大多数差异通常是在日常工作中观察/实践的。但是我想知道的是如何检索通过截断删除的记录。

我读到truncate命令不会像delete那样记录每一行的事务日志,而是记录用于页面分配的日志。

那么我可以从表中检索被截断(并提交)的记录吗?

例如

Truncate table Student_Record;

如果我仅运行此命令,是否可以检索Student_Record中的记录?

1 个答案:

答案 0 :(得分:0)

不,您不能。在进行截断之前,您将必须备份数据。

根据official docs

  

截断

     

从表或表的指定分区中删除所有行,   而不记录单个行的删除。现“截断表”为   类似于没有WHERE子句的DELETE语句;然而,   TRUNCATE TABLE更快,并且使用更少的系统和事务日志   资源。

通过不记录任何内容,您可以更快地进行删除,从而节省了空间,因此无法恢复这些项目。

您甚至无法在执行截断时触发任何操作:

  

TRUNCATE TABLE无法激活触发器,因为该操作确实   不记录单个行的删除。有关更多信息,请参见CREATE。   触发器(Transact-SQL)。

使用截断时要小心,如果要检索已删除的行,则必须运行delete语句而不是截断并查看日志。

编辑

执行截断后,有一些解决方案和工具会从数据页读取数据。数据页中的数据被标记为被新数据覆盖。 ApexSQL之类的工具会读取这些信息,从而使您可以为截断的数据生成重新创建脚本。如果在运行截断后立即执行此操作,则可以恢复信息。

但是

如果截断后有更新,插入或删除操作,则数据页可能会被覆盖。如果发生这种情况,即使ApexSQL也无法帮助您。