У меня есть таблицы A и B. Таблица B имеет ограничение внешнего ключа, ссылающееся на таблицу B. Но поскольку SQL Server 2000 поддерживает только каскадное удаление, а не nullify, я решил исправить это с помощью триггера.Почему этот каскадный триггер спуска не работает на SQL Server 2000
Проблема: триггер ниже не работает:
CREATE TRIGGER dbo.TR_A_B_CascadingNullify ON dbo.A
FOR DELETE
AS
UPDATE dbo.B
SET idA = NULL
WHERE idA IN (SELECT id FROM DELETED)
;
При удалении строки в том, что не refered к, все работает. Но когда refered грести будет удален, он не будет работать на ограничение внешнего ключа с сообщением DELETE statement conflicted with COLUMN REFERENCE constraint 'FK_B_A'. The conflict occurred in database 'x', table 'B', column 'idA'.
И, наконец, при установке опции Enforce Foreign Key Constraint
в No
, триггер делает работу, а столбец в таблице B установлено значение NULL ,
Что я делаю неправильно?
Я был введен в заблуждение по документации. Мне не было понятно, что означают варианты, и FOR выглядела как альтернатива AFTER и INSTEAD OF ... В любом случае, сейчас это работает очень хорошо. – doekman