我有一个包含数百个表的数据库。
我正在构建一个脚本来删除此数据库中的所有行。
当然,作为一个关系型数据库,我必须先删除孩子们的行,然后才能触摸父母。
有什么我可以用来做这件事,还是我必须这么做?
修改
已接受的答案已修改为包含“禁用触发器”
EXEC sp_MSForEachTable 'DISABLE TRIGGER ALL ON ? '
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
EXEC sp_MSForEachTable 'DELETE FROM ?'
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
EXEC sp_MSForEachTable 'ENABLE TRIGGER ALL ON ? '
答案 0 :(得分:7)
您可以禁用所有约束,然后删除所有数据,并再次启用约束。您可以将代码放在存储过程中以进行重用。快速又脏的东西:
CREATE PROCEDURE sp_EmplyAllTable
AS
EXEC sp_MSForEachTable ‘ALTER TABLE ? NOCHECK CONSTRAINT ALL’
EXEC sp_MSForEachTable ‘DELETE FROM ?’
EXEC sp_MSForEachTable ‘ALTER TABLE ? CHECK CONSTRAINT ALL’
GO
答案 1 :(得分:4)
我猜你想要没有任何数据的结构?
您可以编写表/ sp /用户定义的函数/触发器/权限等脚本,然后在使用脚本重新创建数据库之前删除数据库吗?
此链接说明如何使用SQL Server Management studio为数据库中的所有对象生成脚本... http://msdn.microsoft.com/en-us/library/ms178078.aspx
答案 2 :(得分:2)
如果这是MySQL,我会使用“mysqldump --no-data
”来备份数据库元数据。然后我会完全删除数据库并恢复无数据备份。
除了三步过程之外,就交易和I / O而言,它比单独从每个表中删除要快得多。它还缩小了磁盘上的表空间,删除不会(对InnoDB来说)。
我不熟悉Microsoft SQL Server的备份工具,是否有一些等效选项?
我认为我找到了一些有希望的东西:How to: Generate a Script (SQL Server Management Studio)
生成整个脚本 数据库
- 在对象资源管理器中,连接到SQL Server数据库的实例 引擎然后展开该实例。
- 展开数据库,右键单击任何数据库,指向任务,指向 生成脚本,然后按照 生成脚本向导中的步骤。
醇>