1

1対多リレーションシップを持つテーブルを作成しようとしました。 Personalに外部キーを追加しても機能していないようです。私は個人情報テーブルをアドレステーブルにリンクしようとしていますか?このエラーの解決策は何ですか?SQL Server:リレーションシップを作成できません

  • Addressテーブルは正常に保存
  • Personalテーブル

'FK_Personal_Address' 関係を作成することができません。
参照列 'Personal.ID'がID列である場合、外部キー 'FK_Personal_Address'をカスケードすることはできません。 制約を作成できませんでした。以前のエラーを参照してください。

+1

クエリを表示できますか? – Pankaj

答えて

5

Personテーブルの主キーは、おそらくIDです。これは自動インクリメント整数フィールドです。

外部キーは、IDではなくint型のアドレステーブルに作成する必要があります。それはPersonレコードに対応する整数を保持しますが、外部キーを自動インクリメントしたくないのです。子テーブル(アドレス)の各レコードについて、それが属する親レコード(Person)を示す外部キーの特定の値を設定します。

例:

INSERT person (firstname, lastname) VALUES ('John', 'Smith') 

これは、新しい人のレコードを挿入し、それがIDENTITYfieldであるため、フィールドpersonidが自動的に入力されます。

John Smithからアドレスを入力するには、彼のpersonidを知る必要があります。たとえば:

-- Say, for example, personid of John Smith is 55 
INSERT address (personid, street, city) VALUES (55, 'High Street', 'London') 

だからperson表にPERSONIDが自動的に生成されますが、addressテーブルには、既存の人物と一致する値を指定します。それは外来キーの全体のポイントです。

スキーマに関する情報がないと、問題を推測することは難しいです。

+0

外部キーの特定の値はどのように設定しますか? – user962206

+0

あなたはスキーマ/クエリplsを共有できますか? – Pankaj

1

質問のテーブルの構造を見ることなく、あなたの子テーブル(アドレス)の列がID列としてマークされている可能性が最も高いと考えられます。外部キー関係では、親がフィールドの値を決定します。子の値は決定しません。列は、IDではなく、子表のPKでもかまいません。

1

自分自身に関連するPersonal.IDに外部キーを作成しようとしているようです。

あなたは、おそらくのような何かをしたい:

ALTER TABLE Adress WITH NOCHECK ADD CONSTRAINT [FK_Adress_Personnal] FOREIGN KEY(Personal_Id) 
REFERENCES Personal (ID) 
+0

本当に可能ですか? – Pankaj

-1

私は私のテーブルのいずれかに外部キー制約を追加すると、同じエラーを得ました。 回避策はNOCHECKを付け加えることでした。なぜ私は他の2つの外部キーをCHECKで追加できましたが、3番目の外部キーは追加できませんでしたか?私はそれがテーブルではなく、追加される外部キーの順序であることがわかりました。これに対する洞察は非常に高く評価されます。

2

上記の答えで説明したID、int、および主キーに必ず従ってください。しかし、私はまだ同じエラーが発生していました。

'xReason' table saved successfully 
'xAddress' table 
- Unable to create relationship 'FK_xAddress_xReason'. 
The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_xAddress_xReason". The conflict occurred in database "databaseName", table "dbo.xReason", column 'xReasonID'. 

私はいくつかのデータを挿入したときにこのエラーは、ここまで読めば、これはあなたの問題かもしれませんReason table.(主キーを持っていたテーブル)

に分解。

関連する問題