2010-08-12 31 views
6

Tôi đang cố tạo trình kích hoạt Xóa. Tôi có bảng điều hướng này được gọi là Nemanet_Navigation. Bảng có một khóa ngoại cho chính nó nhưng khi lựa chọn mối quan hệ cho bảng tôi có trong INSERT và UPDATE Specification được chọn - Delete Rule NO Action. Vì vậy, tôi không chọn Cascading. Sau đó, tôi có kích hoạt này:Không thể tạo trình kích hoạt Xóa vì bảng có khóa NGOẠI HỐI với tầng 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 

Nhưng tôi nhận được lỗi sau:

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

Điều này là do bảng có KEY NƯỚC NGOÀI VỚI tầng DELETE. Nhưng bảng Nemante_Navigation của tôi có quy tắc xóa - không có hành động (nhưng được đánh dấu màu xám vì một lý do nào đó mà tôi không biết - và tôi không thể thay đổi nó). Trình kích hoạt nằm trong thư mục có tên Triggers trong Bảng Nemanet_Navigation. Ai có thể giúp được không?

+0

Phiên bản SQL Server nào? –

Trả lời

3

INSTEAD OF trình kích hoạt là để sửa đổi chế độ xem mà bạn không thể sử dụng DML. Hãy thử với một kích hoạt BEFORE hoặc AFTER.

Các vấn đề liên quan