我刚刚向旧数据库添加了大约 80 个“丢失”外键,并且(不出所料)由于 FK 约束删除表时,数据库重新创建脚本现在失败。该策略一直是按自然顺序删除表,这一直有效。我不想保持这种方法,并尝试禁用所有 FK 约束,如下所示:
USE MYDB;
GO
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"
GO
DROP TABLE [dbo].[Table1]
DROP TABLE [dbo].[Table2]
DROP TABLE [dbo].[Table3]
...
exec sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
GO
问题是我仍然遇到错误:
消息 3726,级别 16,状态 1,第 17 行无法删除对象 'dbo.Table1',因为它被 FOREIGN KEY 约束引用。消息 3726,级别 16,状态 1,第 18 行无法删除对象“dbo.Table2”,因为它被 FOREIGN KEY 约束引用。
谁能建议我做错了什么?我在 Windows 7 上使用 SQL Server 2008 r2。
编辑:我注意到我有一个循环引用,即 Table1 对 Table2 有一个 FK,反之亦然,但即便如此......