2012-02-09 145 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 

所以,主鍵包括作爲表中的主鍵。我想這樣做,如果主鍵被刪除,包含主鍵作爲外部的行將被自動刪除。 (例如:當我刪除I​​D 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/

這裏是微軟的文檔的鏈接上的「層疊參照完整性約束「:

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

1

注意:在Microsoft SQL中,不允許對自引用表進行級聯刪除。您必須使用觸發器,創建存儲過程或處理調用應用程序中的級聯刪除。其中一個例子是單個表中有一個ID作爲標識,而ParentID與同一個表中的ID有關係。

see here