Ограничение внешнего ключа - PullRequest
2 голосов
/ 09 февраля 2012

У меня есть таблица, которая содержит следующие столбцы.

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

Итак, первичный ключ включает в качестве первичного ключа в таблицу.Я хочу сделать это, если первичный ключ удален, строки, которые содержат первичный ключ как внешний, удаляются автоматически.(пример: когда я удаляю строку с идентификатором 1, я хочу автоматически удалить строки с идентификаторами 3, 4, 5).Как сделать так, чтобы первичный ключ был включен как внешний ключ в таблицу?Как я могу это сделать.Спасибо.

Ответы [ 3 ]

3 голосов
/ 09 февраля 2012

Вам необходимо реализовать «триггер», который выполняет «каскадное удаление».

Вот хорошая ссылка:

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 голос
/ 09 февраля 2012

ПРИМЕЧАНИЕ. В Microsoft SQL не допускается каскадное удаление в самоссылающейся таблице. Вы должны либо использовать триггер, создать хранимую процедуру или обработать каскадное удаление из вызывающего приложения. Примером этого является то, что одна таблица имеет идентификатор в качестве идентификатора и ParentID с отношением к идентификатору в той же таблице.

см. Здесь

0 голосов
/ 09 февраля 2012

Единственным способом будет добавить триггер. Для получения дополнительной информации вы можете обратиться к следующим ссылкам.

http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/b777ec73-e168-4153-a669-835049a96520

другая ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...