MSSQL2000 快速删除大量数据的语[2026/9/20 22:46:09]
 

查看: 2  |  回复: 0
 MSSQL2000 快速删除大量数据的语句
楼主
发表于 今天 21:07 
TRUNCATE TABLE TabCount

不是逐行删除,直接释放数据页,日志只记录页分配,所以速度极快,但行为和 DELETE 完全不一样。

⚠️ 必须检查的风险点

1. 自增标识列 (IDENTITY) 会被重置

如果表有 IDENTITY(1,1) 自增字段:

DELETE 删除全部数据,下一条插入 ID 接着原来最大值继续

TRUNCATE 会重置回初始值(一般是 1)

业务如果依赖 ID 连续性、或者外部系统依赖这个 ID,会出问题。

2. 不会触发表上的 DELETE 触发器

表如果定义了 AFTER DELETE 触发器:

DELETE 删每行都会触发触发器

TRUNCATE 完全不会执行 DELETE 触发器

如果触发器里面有审计日志、联动更新其他表的逻辑,这部分逻辑不会跑,数据会不一致!

3. 外键约束限制(你现在能执行说明当前没有被外键引用)

能成功执行 TRUNCATE,代表没有别的表外键指向 TabCount后续如果新增外键,就不能再直接 truncate。 反过来:如果 TabCount 本身有外键引用别的表,这个不影响。

4. 权限要求更高

TRUNCATE 需要表的 ALTER 权限,普通 DELETE 只需要 DELETE 权限。 本次执行成功没问题;后续程序账号如果想执行 truncate,权限要单独授予,一般业务程序不建议给这个权限。

您需要登录后才可以回帖 登录 | 立即注册
【本版规则】请勿发表违反国家法律的内容,否则会被冻结账号和删贴。
用户名: 立即注册
密码:
2020-2026 MaNongKu.com