従来のデータベースに約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制約によって参照されているため、削除できませんでした。
誰かが私が間違っていることを提案できますか?Windows7でSQLServer2008r2を使用しています。
編集:循環参照があることに気づきました。つまり、Table1にはTable2へのFKがあり、その逆もありますが、それでも...。