Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 截断期间取消查询_Sql_Sql Server 2005 - Fatal编程技术网

Sql 截断期间取消查询

Sql 截断期间取消查询,sql,sql-server-2005,Sql,Sql Server 2005,我想知道如果在截断期间取消查询执行会发生什么情况,记录是否会被删除?有没有办法恢复它们? Truncate在包含150万条记录的表上被激活 在谷歌上搜索一下,我知道答案是否定的,但我想确定一下。 我正在使用SQL Server 2005Truncate解除分配给表的页面 这仍然是原子的,因为您可以取消并让它回滚。您还可以在显式事务中包含一个TRUNCATE,并执行回滚 但是,一旦提交了事务,记录就会消失。与删除不同,由于操作的日志记录最少,因此在记录内容的事务日志中没有记录。关于链接的良好解释

我想知道如果在截断期间取消查询执行会发生什么情况,记录是否会被删除?有没有办法恢复它们? Truncate在包含150万条记录的表上被激活 在谷歌上搜索一下,我知道答案是否定的,但我想确定一下。
我正在使用SQL Server 2005

Truncate
解除分配给表的页面

这仍然是原子的,因为您可以取消并让它回滚。您还可以在显式事务中包含一个
TRUNCATE
,并执行回滚

但是,一旦提交了事务,记录就会消失。与删除不同,由于操作的日志记录最少,因此在记录内容的事务日志中没有记录。

关于链接的良好解释

据我所知,如果您有一个事务控件,那么DELETE和TRUNCATE都可以回滚


区别在于,在没有事务的情况下,如果执行删除操作,您仍然可以通过还原日志来恢复数据,例如,在截断操作中无法执行的操作,因为删除操作将逐行记录,而截断操作(正如@JNK所指出的)的记录最少。

如果截断操作是未提交的事务的一部分,取消查询执行可能会导致记录被还原。如果您确实设法在中途取消它,并且不在显式事务中,它将作为自动提交事务的一部分回滚。可能不太可能,因为truncate非常快,延迟truncate可以用于大型表。它不是事务的一部分。当我计算取消后,它只有300000条记录。我想剩下的都没了……如果我在截断之前把所有记录都放到临时表中,这对我也没什么帮助,对吧?@Alina-不太可能帮到你。如果数据足够重要,它可能仍然可以恢复,因为它仍然存在于数据页上,并且您可能可以从事务日志中确定解除分配的页面(如果该信息仍然存在),但我不知道有任何实用程序可以这样做。谢谢,下次我会更加小心。。。非常不幸