Невозможно создать триггер удаления, поскольку в таблице есть FOREIGN KEY с каскадным удалением - PullRequest
7 голосов
/ 12 августа 2010

Я пытаюсь создать триггер удаления. У меня есть эта навигационная таблица, которая называется Nemanet_Navigation. Таблица имеет внешний ключ к себе, но при выборе отношения для таблицы, которую я выбрал в INSERT и UPDATE, выбрано Specification - Delete Rule NO Action. Поэтому я не выбираю Каскадирование. Тогда у меня есть этот триггер:

CREATE TRIGGER Del_Nemanet_Navigation ON Nemanet_Navigation 
  INSTEAD OF DELETE
AS  

CREATE TABLE #Table(
    Nav_ID uniqueidentifier
    )
    INSERT INTO #Table (Nav_ID)
    SELECT Nav_ID
    FROM deleted

    DECLARE @C uniqueidentifier
    SET @c = 0

    WHILE @C <> (SELECT COUNT(Nav_ID) FROM #Table) BEGIN
        SELECT @c = COUNT(Nav_ID) FROM #Table

        INSERT INTO #Table (Nav_ID)
        SELECT Nemanet_Navigation.Nav_ID
        From Nemanet_Navigation
        LEFT OUTER JOIN #Table ON Nemanet_Navigation.Nav_ID = #Table.Nav_ID
        WHERE   Nemanet_Navigation.Nav_pID IN (SELECT Nav_ID FROM #Table)
        AND     #Table.Nav_ID IS NULL
    END

    DELETE  Nemanet_Navigation
    FROM    Nemanet_Navigation
    INNER JOIN #Table ON Nemanet_Navigation.Nav_ID = #Table.Nav_ID

Но я получаю следующую ошибку:

Невозможно создать триггер INSTEAD OF DELETE 'Del_Nemanet_Navigation' для 'Nemanet_Navigatin'.

Это потому, что в таблице есть ИНОСТРАННЫЙ КЛЮЧ С каскадным УДАЛЕНИЕМ. Но в моей таблице Nemante_Navigation есть правило удаления - никаких действий (но по какой-то причине я отмечен серым, и я не могу его изменить). Триггер находится в папке «Триггеры» в таблице Nemanet_Navigation. Кто-нибудь может помочь?

1 Ответ

2 голосов
/ 19 июля 2011
Триггеры

INSTEAD OF предназначены для изменения видов, которые вы не можете использовать DML.Попробуйте с помощью BEFORE или AFTER триггера.

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