2009-02-05 6 views

Respuesta

28

Puede utilizar la opción INSTEAD OF, solo elimine explícitamente las filas al final. Por ejemplo:

CREATE TRIGGER dbo.My_Table_Delete_Instead_Of_Trigger 
ON dbo.My_Table 
INSTEAD OF DELETE 
AS 
BEGIN 

    -- Do some stuff here 

    DELETE T 
    FROM DELETED D 
    INNER JOIN dbo.My_Table T ON T.PK_1 = D.PK_1 AND T.PK_2 = D.PK_2 
END 

Esto supone una clave principal compuesta de columnas PK_1 y PK_2.

+0

Muchas gracias Tom – Fet

+0

¿No dispararía esto de nuevo? –

5

No puede. Pero puede realizar una reversión en un desencadenante DESPUÉS DE ELIMINAR.

0

No puede. Lo que puede hacer es verificar la tabla DELETE y deshacer la eliminación si es necesario.

Aquí está la secuencia de eventos:

  • Enviar delete para SQL Server
  • elemento se elimina de la tabla
  • OnDelete gatillo Incendios Realizar su lógica
  • Si la lógica falla/pasa/lo que sea , deshacer eliminar
+0

Esto no ayuda con el caso de uso más común para un desencadenante "antes de eliminar" - elimina en cascada - lo que me deja perplejo en cuanto a lo que * haría * con eliminar. –

+1

Normalmente utilizo el desencadenador OnDelete para crear una entrada de historial en la que un elemento fue eliminado por un usuario en un momento determinado. –

+0

Auditoría personalizada que no depende del comportamiento de la aplicación. Me gusta. +1 para la maldita buena idea. –

Cuestiones relacionadas