Sql sever 清空数据库所有数据

2020-08-25  本文已影响0人  zxws1009

1、清空SQL Server数据库中所有表数据
编写存储过程脚本:

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

说明:

存储过程sp_MSForEachTable :循环检查所有的表(微软官方文档)。

脚本创建了一个命名为sp_DeleteAllData的存储过程,前面两行语句分别禁用约束和触发器;第三条语句才是真正地删除所有数据,接下里的语句分别还原约束和触发器;最后一条语句是显示每个表中的记录,确认是否清空了所有的表数据。

2、 执行存储过程

USE [db_Name]
GO

DECLARE @return_value int
EXEC    @return_value = [dbo].[sp_DeleteAllData]
SELECT  'Return Value' = @return_value
GO

3、检查是否全部清空

select distinct object_name(id) from sys.sysindexes where rows>0

发现有未清楚干净的,可手动清除一下
手动清除使用TRUNCATE TABLE 替代 DELETE

4、数据库清理日志
Sql Server2014数据库日志占用特别大,清理方法。直接贴代码

    USE[master]
    GO
    ALTER DATABASE db_Name SET RECOVERY SIMPLE WITH NO_WAIT
    GO
    ALTER DATABASE db_Name SET RECOVERY SIMPLE   --简单模式
    GO
    USE db_Name 
    GO
    DBCC SHRINKFILE (N'db_Name_log' , 11, TRUNCATEONLY)
    GO
    USE[master]
    GO
    ALTER DATABASE db_Name SET RECOVERY FULL WITH NO_WAIT
    GO
    ALTER DATABASE db_Name SET RECOVERY FULL  --还原为完全模式
    GO

这个时候的数据库就非常干净了!

当然有更好的方案,欢迎交流~~

结束!

上一篇 下一篇

猜你喜欢

热点阅读