0

外部キーを追加 (私の場合は再追加) するための 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......)

なぜこれが失敗するのですか?また、なぜその特定の時点で失敗するのですか? 例外が発生した後にデータベースを見ると、他の外部キーが追加されていることがわかります。これを回避する方法はありますか?どんな助けでも大歓迎です!

4

0 に答える 0