2012-02-09 50 views
2

私は次の列を含むテーブルを持っています。外部キー制約

ID int PK 
Name nvarchar(50) NotNull 
FID int FK reference to ID 

ID Name PK 
1 A  Null 
2 B  Null 
3 C  1 
4 D  1 
5 E  1 
6 F  2 

したがって、プライマリキーはテーブルのプライマリキーとして含まれています。プライマリキーが削除された場合、プライマリキーが外部として格納されている行は自動的に削除されます。 (例:ID 1の行を削除すると、ID 3、4、5の行が自動的に削除されます)。プライマリキーが外部キーとしてテーブルに含まれるようにするにはどうすればよいですか?これどうやってするの。ありがとう。

答えて

3

「カスケード削除」を実行する「トリガー」を実装する必要があります。ここで

は良いリンクです:

ここ

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=142564

CREATE TRIGGER test_trig 

ON dbo.Table_1 

FOR DELETE 

AS 
BEGIN 
delete a from dbo.Table_2 a 
JOIN 
deleted d 
ON a.joincol = d.joincol 

END 

は、いくつかの他の選択肢です:

http://www.mssqltips.com/sqlservertip/1508/foreign-key-vs-trigger-referential-integrity-in-sql-server/

そしてここでは、カスケード参照整合性制約」に関するMicrosoftのドキュメントへのリンクあり":

http://msdn.microsoft.com/en-us/library/ms186973.aspx

1

注:Microsoft SQLでは、自己参照テーブルへのカスケード削除は許可されていません。トリガを使用するか、ストアドプロシージャを作成するか、呼び出し元のアプリケーションからカスケード削除を処理する必要があります。この例では、単一のテーブルがIDとしてIDを持ち、ParentIDがIDとの関係が同じテーブルにある場合です。

see here