1. ホーム
  2. sql-server

[解決済み] 更新時のSqlエラー : UPDATE ステートメントが FOREIGN KEY 制約と競合しています。

2022-01-30 16:52:47

質問

というテーブルがあります。 patient_address でPKキーを参照する。 patient テーブルを作成します。しかし、私は次の文のいずれかを実行しようとすると。

update patient set id_no='7008255601088' where id_no='8008255601089'
update patient_address set id_no='7008255601088' where id_no='8008255601089'

このようなエラーメッセージが表示されるのですが。

UPDATE 文は REFERENCE 制約と競合しています。 "FK__patient_a__id_no__27C3E46E". この競合は、データベース "PMS"、テーブル "dbo.patient_address"、列 'id_no'." または "The UPDATE 文は FOREIGN KEY 制約と競合していました。 "FK__patient_a__id_no__27C3E46E". この競合はデータベース "PMS", テーブル "dbo.patient", カラム 'id_no'." .

どなたか原因をご存知の方はいらっしゃいますか?ありがとうございます。

解決方法を教えてください。

このエラーは、あるテーブルの主キーが更新されたが、他のテーブルからの外部キーによって参照されており、更新の指定がアクションなしに設定されている場合に発生します。No action はデフォルトのオプションです。

このようなケースで、更新操作にNo actionが設定されている場合、外部キーの定義をCascadeに変更することができます。

外部キーを右クリックし 修正 . 外部キー関係ダイアログのINSERTとUPDATEの項目で、UPDATEのルールをカスケード(Cascade)に設定します。

また、T-SQLを使用してルールを設定することもできます。

ALTER TABLE YourTable
DROP Constraint Your_FK
GO

ALTER TABLE YourTable
ADD CONSTRAINT [New_FK_Constraint]
FOREIGN KEY (YourColumn) REFERENCES ReferencedTable(YourColumn)
ON DELETE CASCADE ON UPDATE CASCADE
GO 

これが役に立つといいのですが