今早同事跟进客户反馈的问题时,提了个要求,要求清空数据库中所有表的数据。
记得之前用游标遍历所有的表名 + exec 动态语句 truncate table 表名 实现过这个功能。
网上搜了下,有更简单的方法:
CREATE PROCEDURE sp_DeleteAllData
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
exec sp_DeleteAllData
用SQL Server 2000数据库测试了下,确实可以实现。
参考:http://blog.csdn.net/yinxiaoqi/article/details/5809944