2010-08-12 9 views
6

Estoy intentando crear un desencadenador Eliminar. Tengo esta tabla de navegación que se llama Nemanet_Navigation. La tabla tiene una clave externa a sí mismo pero al seleccionar la relación para la tabla que tengo en INSERTAR y ACTUALIZAR Especificación seleccionada - Eliminar regla NO acción. Entonces no selecciono Cascading. Entonces tengo este disparador:No se puede crear el desencadenador Eliminar porque la tabla tiene una LLAVE EXTRAÑA con DELETE en cascada

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 

Pero me sale el siguiente error:

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

Esto se debe a que la tabla tiene una clave externa con eliminación en cascada. Pero mi tabla Nemante_Navigation tiene una regla de eliminación: no se realiza ninguna acción (pero está marcada en gris por algún motivo que desconozco) y no puedo cambiarla. El desencadenador se encuentra en la carpeta llamada Triggers en la tabla Nemanet_Navigation. ¿Alguien puede ayudar?

+0

¿Qué versión de SQL Server? –

Respuesta

3

INSTEAD OF Los activadores son para modificar vistas que no puede usar DML. Pruebe con un disparador BEFORE o AFTER.

Cuestiones relacionadas