MSSQL2000 快速删除大量数据的语句 - 第1页 - 码农库
 
首页 /编程语言和算法/其它语言/AI
 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,权限要单独授予,一般业务程序不建议给这个权限。

 
全部回复(0)
首页 | 电脑版 |