sqlserver 怎么清空表

SQL Server中的DELETE和TRUNCATETABLE,这两个词听起来很有趣。
我当时很困惑。
我当时用的是DELETE。
2 02 2 年某个城市有一个项目,当时我只想清理桌子。
表中有数据和触发器。
我用的是删除。
我当时觉得这很简单,所以我输入了 DELETEFROM 表名,然后数据就消失了。
后来我意识到这个 DELETE 可以触发触发器。
我当时以为不会触发。
我记得该项目有使用触发器来控制数据的业务规则,因此 DELETE 非常合适。

然后它说 TRUNCATETABLE。
这太棒了。
它也用于清表,但与DELETE不同。
后来在另一个项目中,我需要在不触发触发器的情况下快速清空一个表,所以当时我使用了TRUNCATETABLE。
写入方法也很简单,就是TRUNCAETABLE表名。
一旦使用这个语句,表中的所有数据就没有了,自增ID从头开始编码。
我记得当时表里有几百万条数据。
使用这句话后,瞬间就没了,速度超快。

但这两种说法也是不同的。
DELETE可以有WHERE条件,可以指定删除哪些数据,还可以回滚,就像删除时给数据系上安全带一样。
但 TRUNCATETABLE 不同。
它不能有 WHERE 条件并且不能回滚。
直接删除所有数据。
它有点像核按钮,一旦按下就不可逆转。

简单来说,如果你想触发触发器或者执行条件数据删除,就选择DELETE;如果你只是想快速清空表并且不想触发任何操作,那么TRUNCATETABLE是你的选择。
后来我才知道,这两种说法各有各的用处,不能乱用。
我当时就极端了,认为TRUNCATETABLE肯定比DELETE好。
后来我发现,关键在于具体需求。
说起来我会哭,但我学到了一些东西,这很好。

如何在SQLSERVER中快速有条件删除海量数据

删除百万数据时,DELETE需要3 -4 小时,TRUNCATE需要5 分钟。

这就是问题所在:DELETE 会产生 ROWLOG,但不会 TRUNCATE。

有条件删除:DELETE保存日志,无法避免。
解决方案:SELECT INTO 新表,TRUNCATE 原始表,RENAME 新表。

实用提醒:先备份,后利用。

教您如何简单删除SQLServer数据库的所有数据

嘿,这种事以前发生在我身上。
记得当时我负责清理一个大数据库的空库。
里面有无数张桌子,每一张桌子之间都有着不同复杂的限制。
我当时心烦意乱,不知道该从哪张表开始删除。

当时我尝试按字母顺序删除表,但发现有些表无法删除,因为它们有外键约束,必须先删除依赖于它们的子表。
这种方法在表不多的时候有效,但是当表太多的时候就很烦人了,你就得花时间研究约束关系,搞清楚删除的顺序。

后来,我无意中发现了一个神奇的存储过程,叫做sp_MSForEachTable。
这是微软官方文档中提及不多的东西,很多开发者可能都没有听说过。
一开始我还有点担心,以为这东西可能不稳定,后来发现其实还不错。

我编写了一个脚本并创建了一个名为 sp_DeleteAllData 的存储过程。
首先禁用所有约束和触发器,然后批量删除所有表中的数据,最后恢复约束和触发器。
最后添加一条语句来显示每个表中的记录,以确保所有表都已被扫描。

这个方法使用起来非常方便。
虽然还是有点麻烦,但至少比之前的方法好很多了。
如果以后遇到类似的问题我一定会再次使用这个方法。
哎,说起我这些年的数据库经历,其实我也经历过很多坑。
😂