0

うまく設計されていない古いデータベースを継承しました。これは、非常に多くの外部キー関係が欠落している Sql Server 2008 データベースです。以下に 2 つのテーブルを示します。dbo.app_status.status_iddbo.app_additional_info.application_idの間に FK 関係を手動で作成しようとしています。

ここに画像の説明を入力

以下のクエリを使用してリレーションシップを作成しようとするときに、SQL Server Management Studio を使用しています。

USE myDatabase; 
GO ALTER TABLE dbo.app_additional_info 
ADD CONSTRAINT FK_AddInfo_AppStatus FOREIGN KEY (application_id) 
    REFERENCES dbo.app_status (status_id) 
    ON DELETE CASCADE
    ON UPDATE CASCADE ; 
GO

ただし、クエリを実行するとこのエラーが発生します

ALTER TABLE ステートメントが FOREIGN KEY 制約 "FK_AddInfo_AppStatus" と競合しました。データベース「myDatabase」、テーブル「dbo.app_status」、列「status_id」で競合が発生しました。

各テーブルには既に約 130,000 のレコードが含まれているため、クエリが失敗するのではないかと考えています。

助けてください。

ありがとう。

4

1 に答える 1

2

dbo.app_additional_info.application_IDにない値が にあるため、エラーが発生していdbo.app_Status.Status_IDます。命名規則がひどく台無しにされていない限り、関係のない列に関係を追加しようとしているのに、なぜ をapplication_ID参照するのでしょうstatus_IDか?

dbo.App_Additional_Info.Application_ID参照する必要があると思いますdbo.Application.Application_ID(テーブルと列の名前を少し推測します)ので、これが必要です:

USE MyDatabase
GO
ALTER TABLE dbo.App_Additional_Info
ADD CONSTRAINT FK_App_Additional_Info_Application_ID (Application_ID)
    REFERENCES dbo.Application (Application_ID)
    ON DELETE CASCADE
    ON UPDATE CASCADE;
于 2012-10-26T09:54:39.110 に答える