MSSQL2000 快速删除大量数据的语句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,权限要单独授予,一般业务程序不建议给这个权限。