2009-11-12 3 views
1

У меня есть 2 таблицы: survey (id(PK), name) и survey_to_topic (survey_id(PK,FK,not null), topic_id(PK,FK,not null)). При попытке удалить из обследования таблицы, я получаю исключение:Перед запуском в SQL Server

«УДАЛИТЬ заявление конфликтного с Справочной ограничении „FK_survey _to _topic _survey“. конфликта произошел в базе данных „MyDatabase“, таблица «dbo.survey _to _topic», колонка 'survey _id'. "

Чтобы не было ошибок, сначала я должен удалить запись из таблицы survey_to_topic и после этого из обзора таблицы. Я думаю, что это лучше сделать перед триггером при опросе таблицы, но я не могу найти никакой информации об этом. Есть много статей о триггерах в PL/SQL, но я использую SQL Server.

ответ

6

Вы можете добавить ON DELETE CASCADE к взаимосвязи между двумя таблицами, а записи из таблицы survey_to_topic будут удалены автоматически.

См http://msdn.microsoft.com/en-us/library/aa933119(SQL.80).aspx

+0

Да, определенно намного проще решение –

+0

Спасибо, это работа. – Kate

+0

вы можете принять ответ? :) –

1

Вы можете использовать ON DELETE CASCADE. Это добавляется в таблицу, содержащую FK.

См. Пример here.

+0

Спасибо за экзамен. – Kate

1

Как уже упоминалось ранее Alex Deem и прохожий - вы должны использовать ON DELETE CASCADE в отношении вашего внешнего ключа, который автоматически обрабатывает этот сценарий для вас.

SQL Server не знает концепции ПЕРЕД (операций) TRIGGERs - SQL Server имеет триггеры AFTER или триггеры INSTEAD OF. Для получения дополнительной информации см. Статью Introduction to triggers.

Но ON DELETE CASCADE - это, безусловно, самый простой способ сделать это.

0

Как упоминалось выше, ON DELETE CASCADE - это способ пойти - до тех пор, пока вы осознаете последствия; есть причина, по которой ON DELETE NO ACTION (ошибка повышения) является значением по умолчанию. Другими словами, вы должны планировать свою стратегию удаления - слишком просто стереть строки из нескольких таблиц непреднамеренно, используя ON DELETE CASCADE.

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