外部キーを追加 (私の場合は再追加) するための add ステートメントを生成するスクリプトがあります。
このスクリプトを実行してステートメントを取得します。この後、外部キーを削除するスクリプトを実行します。
これが完了したら、外部キーの追加ステートメントを実行してそれらを再度追加します。
上記の順序でスクリプトを実行すると、うまくいきます。外部キーが削除されたら、add ステートメントを実行すると、すべてが期待どおりに追加されます。
ただし、add ステートメントを取得して外部キーを削除した後、テーブルを切り捨てて一括コピーを実行し、外部キーを再度追加したいと考えています。ただし、これを行うと失敗します。
外部キーを再追加するときに発生するエラーは次のとおりです。
タイプ 'System.Data.SqlClient.SqlException' の初回例外が System.Data.dll で発生しました
追加情報: ALTER TABLE ステートメントが FOREIGN KEY 制約 "FK_Order_Details_Orders" と競合しました。データベース「Northwind2」、テーブル「dbo.Orders」、列「OrderID」で競合が発生しました。
私の再追加ステートメントは次のようになります。
USE Northwind2;
ALTER TABLE [dbo].[Products] WITH CHECK
ADD CONSTRAINT [FK_Products_Categories]
FOREIGN KEY([CategoryID]) REFERENCES [dbo].[Categories] ([CategoryID])
ALTER TABLE [dbo].[Products] CHECK CONSTRAINT [FK_Products_Categories]
ALTER TABLE [dbo].[Orders] WITH CHECK
ADD CONSTRAINT [FK_Orders_Customers]
FOREIGN KEY([CustomerID]) REFERENCES [dbo].[Customers] ([CustomerID])
ALTER TABLE [dbo].[Orders] CHECK CONSTRAINT [FK_Orders_Customers]
ALTER TABLE [dbo].[CustomerCustomerDemo] WITH CHECK
ADD CONSTRAINT [FK_CustomerCustomerDemo_Customers]
FOREIGN KEY([CustomerID]) REFERENCES [dbo].[Customers] ([CustomerID])
ALTER TABLE [dbo].[CustomerCustomerDemo] CHECK CONSTRAINT [FK_CustomerCustomerDemo_Customers]
(and so on and so forth......)
なぜこれが失敗するのですか?また、なぜその特定の時点で失敗するのですか? 例外が発生した後にデータベースを見ると、他の外部キーが追加されていることがわかります。これを回避する方法はありますか?どんな助けでも大歓迎です!