2012-02-09 5 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 каскадное удаление в таблицу саморегуляции не допускается. Вы должны либо использовать триггер, создать хранимую процедуру, либо обрабатывать каскадное удаление из вызывающего приложения. Примером этого является то, что одна таблица имеет идентификатор как идентификатор и ParentID с отношением к ID в той же таблице.

see here

Смежные вопросы