2010-08-12 2 views
6

삭제 트리거를 만들려고합니다. Nemanet_Navigation이라고하는 네비게이션 테이블이 있습니다. 테이블 자체에 대한 외래 키가 있지만 INSERT 및 UPDATE 스펙에서 선택된 테이블에 대한 관계를 선택할 때 - Delete Rule NO Action. 그래서 저는 계단식을 선택하지 않았습니다. 그럼이 트리거가 :테이블에 계단식 DELETE가있는 외래 키가 있기 때문에 삭제 트리거를 만들 수 없습니다

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 Table 아래의 Triggers 폴더에 있습니다. 아무도 도와 줄 수 있니?

+0

어떤 버전의 SQL Server입니까? –

답변

3

INSTEAD OF 트리거는 DML을 사용할 수없는보기를 수정하기위한 것입니다. BEFORE 또는 AFTER 트리거를 사용해보십시오.

관련 문제