清理数据库

Raj*_*ore 2 sql t-sql sql-server sql-server-2008

我有一个包含数百个表的数据库.

我正在构建一个脚本来删除此数据库中的所有行.

当然,作为一个关系数据库,我必须先删除孩子们的行才能触摸父母.

有什么东西我可以用于此或我必须这么做吗?

编辑

已接受的答案已修改为包括禁用触发器

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 ? '
Run Code Online (Sandbox Code Playgroud)

Jon*_*han 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
Run Code Online (Sandbox Code Playgroud)