我有一个数据库,其中包含 300 个包含数据的表。我需要删除每个表中的所有数据。我试图截断所有表,但由于表中的列之一是外键,所以我收到一个错误,该过程无法完成。还有其他方法可以解决我的问题吗?谢谢。
问问题
7380 次
2 回答
4
您需要:
- 删除所有外键,截断,然后重新创建 FK;
- 禁用所有外键,删除(不截断),然后重新启用 FK;或者,
- 先从子表中删除。
如果你有幸拥有循环引用,后者可能是不可能的,即使没有循环引用,它仍然可能很复杂。前两个也相对复杂,但我最近为不同的用户解决了一个非常相似的问题(我发现这些比尝试确定正确的删除顺序更容易):
另一个想法是执行更简单和更完整的擦除:
- 编写表(显然还有其他对象)脚本,删除数据库并重新创建它;或者,
- 创建数据库的副本,并使用 Visual Studio / SSDT 或 3rd 方模式比较工具在空数据库中创建所有对象(然后您可以删除旧数据库并重命名新数据库)。
于 2012-08-07T02:45:52.680 回答
-1
试试这个: 一种快速的方法。sp_msforeachtable
是一个未记录的 SP,因此使用它们存在风险。我通过禁用他的答案中使用的约束,使用 Aaron Logic 提出了这个答案。
use [YourDB]
Go
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
EXEC sp_MSForEachTable 'Truncate Table ?'
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
于 2012-08-07T03:05:12.613 回答