1

SQL Server 2008 にプリインストールされたデータベースを取得したポートフォリオ製品の統合部分に取り組んでいます。データベースを直接挿入または更新することはできません。これは、この製品の開発者が提供する API で行うことができます。

API を介して特定の取引タイプを挿入するたびに、エラー メッセージが表示されます –

データベース 'usp_Financial_KernelComponents_Index_Insert_Batch_5' コマンドが失敗しました。INSERT ステートメントが FOREIGN KEY 制約 "FK_Fixings_id_Index_fixingsId" と競合しました。データベース「Portfolio_new」、テーブル「dbo.Financial_Shared_Fixings」、列「id」で競合が発生しました。

このエラーを解決するにはどうすればよいですか、またはこのエラーの考えられる理由は何ですか。提案してください

4

5 に答える 5

3

外部テーブルに存在しない外部キー列の値を持つレコードを挿入しようとしています。

于 2012-12-25T11:31:57.820 に答える
2

外部キー制約とは、列または列のグループの値が、通常は主キーとして別のテーブルの行に存在する必要があることを意味します。次に例を示します。

create table country (id int not null, name varchar(100))
create table city(id int not null, country_id int, name varchar(100))

がテーブルに存在cityすることを要求する外部キー制約を設定した場合、無効なを挿入しようとすると、外部キー制約違反が発生します。country_idcountrycitycountry_id

あなたの場合、API はおそらく一連の値を取り、そのうちの 1 つはID何らかの種類 (または ID を取得できるセカンダリ キー) でなければなりません。そのような API に無効IDを渡すと、外部キー制約違反がトリガーされます。

于 2012-12-25T11:36:01.633 に答える
1

このエラーは、親テーブルに存在しない値を外部キー列に挿入しようとすると発生します。たとえば、値 X を Order テーブルの CustomerId に挿入しようとしていますが、この値は Customer テーブルに存在しません。このエラーは、参照整合性のための優れた戦略が必要なために発生しました。したがって、必要なのは、新しい値 (テーブルに挿入する予定の値) をチェックして、このルールに違反する値があるかどうかを確認することだけです。

次の質問を確認してください。値を挿入するときのこのエラー外部キー制約の失敗とエラー メッセージに関する同じ情報が見つかる可能性があります。

于 2015-10-19T12:18:48.447 に答える
0

簡単に言うと、親行を挿入する前に「子」行を挿入します。

子行を挿入した瞬間に、子と親 (つまり、外部キー) の制約に違反し、子の親が存在しないように見えます。

修正するには、挿入の順序を逆にして、親、次に子 (ren) にします。

于 2012-12-25T11:37:59.680 に答える
-1

子テーブルにレコードを挿入する前に、親テーブル (つまり、参照列が参照されるテーブル) に挿入する必要があります

于 2012-12-25T11:51:14.703 に答える