2010-08-12 84 views
6

我正在嘗試創建刪除觸發器。我有這個名爲Nemanet_Navigation的導航表。該表有自己的外鍵,但在選擇INSERT和UPDATE規範時選擇表的關係時 - 刪除規則無操作。所以我不選擇級聯。然後,我有這樣的觸發器:無法創建刪除觸發器,因爲表具有級聯DELETE的FOREIGN KEY

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 

,但我得到了以下錯誤:

Cannot create INSTEAD OF DELETE trigger 'Del_Nemanet_Navigation' on 'Nemanet_Navigatin'.

這是因爲表有級聯外鍵刪除。但是我的Nemante_Navigation表有刪除規則 - 沒有任何操作(但由於某些原因我標記爲灰色 - 我無法更改它)。觸發器位於Nemanet_Navigation表下的名爲觸發器的文件夾中。任何人都可以幫忙嗎?

+0

什麼版本的SQL Server? – 2010-08-12 16:18:47

回答

3

INSTEAD OF觸發器用於修改您不能使用的視圖DML。 嘗試使用BEFOREAFTER觸發器。