2016-10-13 9 views
0

データベースに2つのテーブルがあります。まず一つは外部キーの値を自動的に更新する方法

CREATE TABLE persons 
(
P_Id int NOT NULL, 
LastName varchar(30) NOT NULL, 
FirstName varchar(30), 
Address varchar(200), 
City varchar(20), 
PRIMARY KEY (P_Id) 
) 

で2つ目は、

CREATE TABLE Orders 
(
O_Id int NOT NULL, 
OrderNo int NOT NULL, 
P_Id int, 
PRIMARY KEY (O_Id), 
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id) 
) 

である私の質問者テーブルの受注テーブルに一度の主キー(P_ID)に自動的にFOREIGN KEY(P_ID)の値を更新する方法はあります更新されます。 ありがとうございます。

+0

を助ける可能性がある場合に挿入[子テーブルのカウントに基づいて親カラムを更新するためのトリガ]の複製を作成する(http://stackoverflow.com/questions/23035922/trigger-to-update-parent-column-based-on-child-table-count) – hemalp108

+2

本当にプライマリキーを更新するべきではありません。カスケード更新を使用することもできますが、自動インクリメントの合成キーを使用する方が良いと思います。 –

答えて

1

あなたの2番目の表は、これは、親のIDが更新されたときに「UPDATE CASCADE ON」は、同じことを行うことを意味します

CREATE TABLE Orders 
(
O_Id int NOT NULL, 
OrderNo int NOT NULL, 
P_Id int, 
PRIMARY KEY (O_Id), 
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id), 
ON UPDATE CASCADE 
) 

でなければなりません。

0

上記の説明は、テーブルのAfter Update Triggerを使用すると簡単に実現できます。 行ってください。..

AS からNP_IDのIntを選択@OP_ID = Deleted.P_IDから削除を選択@NP_ID = Inserted.P_ID @ @OP_IDのIntを、宣言開始更新 後dbo.personsでトリガtrgUpdatePersonsPIDinOrdersを作成します。 @OP_ID <> @NP_IDが続いP_ID = @OP_IDエンド

アップデートDBO.Orders設定P_ID = @NP_IDは、それはあなたにPossiを おかげ

関連する問題