我有一个数据库,其中包含300个包含数据的表。我需要删除每个表中的所有数据。我试图截断所有表,但后来我得到一个错误,该进程无法完成,因为表中的一列是外键。还有其他方法可以解决我的问题吗?感谢。
答案 0 :(得分:4)
您需要:
如果您足够幸运地拥有循环引用,则后者可能无法实现,即使没有循环引用,它仍然可能很复杂。前两个也相对复杂,但我最近为不同的用户解决了一个非常类似的问题(我发现这些比尝试确定正确的删除顺序更容易):
Temporarily disable all foreign key constraints
另一个想法是执行更简单,更完整的擦除:
答案 1 :(得分:-1)
尝试此操作:快速执行此操作。sp_msforeachtable
是未记录的SP,因此使用它们存在风险。我通过禁用他answer中使用的约束来使用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'