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