无法独占数据库时,如何无需删除约束清空所有SQL表数据?
批量清空SQL Server表数据:绕过约束的简单方案
我最近在测试环境里碰到了一模一样的问题,跟你分享下我的解决过程:
问题背景
一开始我想直接删除数据库来清空所有数据,但这个操作要求独占数据库访问权限——可我的测试场景里还有其他程序在连着数据库,这条路直接走不通。
尝试过程中的卡点
后来我打算用TRUNCATE来批量清空所有表数据,但很快发现TRUNCATE有个硬限制:必须先移除所有外键约束才能执行。我试着用系统存储过程批量删约束:
EXEC sp_MSforeachtable @command1="ALTER TABLE ? DROP CONSTRAINT FOREIGNKEY"
但这里的FOREIGNKEY是占位符,得替换成每个表对应的实际外键名称才行。我知道可以通过下面的查询获取约束名:
SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
但怎么把这两个操作结合起来自动批量执行,我一时没找到头绪。
最终可行方案
折腾了半天后,我突然想到DELETE FROM语句根本不需要先删约束!直接用下面的代码就能批量清空所有表的数据,完美解决了我的问题:
EXEC sp_MSforeachtable @command1="DELETE FROM ?" GO
内容的提问来源于stack exchange,提问作者Jack Tyler
相关产品推荐
相关产品推荐

