mssql sqlserver 使用sql脚本清空数据库中所有表数据的方法分享


摘要:
下文讲述使用sql脚本清空指定数据库中表数据的方法分享,如下所示:



表数据清空注意事项:
在清空表数据前,关闭表中的主外键约束
需注意主子表之间的约束

实现思路:
实现 sp_MSForEachTable 遍历生成删除数据表的数据脚本。
在生成删除脚本时,我们需要主子表(存在外键约束的表),我们需先删除子表,然后在删除主表,如果不按照此模式删除数据时,删除脚本会执行失败,为避免删除失败,我们可以采用以下两种方法处理:
1.按照先后顺序,依次对子表执行删除操作,然后对主表执行删除操作。
2.禁用所有约束,删除所有表数据,再启用约束。

删除表数据,脚本举例:

    CREATE PROCEDURE sp_DeleteAllTableData
     AS 
     
   EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
   EXEC sp_MSForEachTable 'ALTER TABLE ? DISABLE TRIGGER ALL'
   EXEC sp_MSForEachTable 'DELETE FROM ?'
   EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
   EXEC sp_MSForEachTable 'ALTER TABLE ? ENABLE TRIGGER ALL'
   EXEC sp_MSFOREACHTABLE 'SELECT * FROM ?'
  GO   
   

应用场景:
在一些不规范的系统开发中,我们常常需要在开发数据库上制作出一个空库,发布至生产环境使用。