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
这个时候的数据库就非常干净了!
当然有更好的方案,欢迎交流~~
结束!
网友评论