话虽如此,TRUNCATE TABLE 也很好,如果你想要回收空间,确实需要使用 DBCC SHRINKFILE。
SELECT 1
WHILE @@ROWCOUNT <> 0
DELETE TOP (100000) MyTable
使用 Truncate Table(以及 drop table)时需要记住的一件事是,如果您曾经有外键引用该表,那么这将不再起作用。
drop table
。http://msdn.microsoft.com/zh-cn/library/ms173790.aspx - ProKinertruncate table
不会触发触发器,但 delete
会触发。 - ProKiner根据完整数据库的大小,缩小可能需要一段时间;我发现如果将其分成较小的块进行缩小,而不是尝试一次性全部恢复,可以加快速度。
您有一个正常的解决方案(截断+收缩数据库)来从表中删除所有记录。
正如Irwin所指出的那样。TRUNCATE命令在被外键约束引用时无法工作。因此,首先删除约束,截断表并重新创建约束。
如果您关心性能 并且 这是您系统的常规例程。您可能需要考虑将此表移动到自己的数据文件中,然后只针对目标数据文件运行收缩操作!
truncate
表格,重新启用约束,然后dbcc shirinkfile
(给自己一些时间)。 - ProKiner