¿Cómo puedo disparar un disparador ANTES de una eliminación en T-SQL 2005? El FOR realmente dispara DESPUÉS de un evento y parece no ANTES del argumento en la función TRIGGER. El INSTEAD OF no es lo que quiero. Necesito disparar antes de eliminar un registro. Alguna idea?¿Cómo puedo disparar un disparador ANTES de una eliminación en T-SQL 2005?
Respuesta
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.
Muchas gracias Tom – Fet
¿No dispararía esto de nuevo? –
No puede. Pero puede realizar una reversión en un desencadenante DESPUÉS DE ELIMINAR.
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
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. –
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. –
Auditoría personalizada que no depende del comportamiento de la aplicación. Me gusta. +1 para la maldita buena idea. –
- 1. ¿Cómo escribir un disparador para cancelar la eliminación en MYSQL?
- 2. Cómo cancelo una eliminación en SQL
- 3. disparar un disparador de actualización cuando el campo particular, se actualiza
- 4. Cómo validar con antes de insertar el disparador en sqlite
- 5. ¿Cómo puedo disparar un evento cuando o antes de que suene el teléfono?
- 6. Cómo crear un desencadenador de eliminación anterior en SQL Server?
- 7. ¿Cómo puedo disparar el evento antes de agregar el elemento a la colección en C#?
- 8. jQuery: ¿Cómo disparar onclick primero antes de onblur?
- 9. pasar una variable en un disparador
- 10. TSql Trigger debe disparar solo en las columnas cuyos valores han cambiado
- 11. Cómo calcular la hora local desde una fecha y hora utc en tsql (sql 2005)?
- 12. ¿Cómo puedo disparar y olvidar un proceso en Perl?
- 13. ¿Cómo puedo disparar un escáner desde un navegador?
- 14. ¿Cómo puedo crear un desencadenador deshabilitado en SQL Server 2005?
- 15. ¿Puedo actualizar Nuevo en antes de insertar el disparador en sqlite?
- 16. Eliminación de registros antes de una fecha determinada
- 17. Antes y AfterBuild de destino en Visual Studio no disparar
- 18. ¿puedo abrir un disparador en la instrucción select en mysql?
- 19. Comando TSQL para conectarse a otro servidor (SQL Server 2005)
- 20. Cómo disparar un evento personal en Javascript
- 21. ¿Qué hace "%% DatabaseEx" en TSQL?
- 22. ¿Después de un disparador en Postgres se bloqueará una inserción/actualización?
- 23. TSQL 2005, XML DML - ¿Actualizar dos valores a la vez?
- 24. ¿Cómo puedo optimizar/refactorizar una cláusula TSQL "ME GUSTA"?
- 25. ¿Cómo puedo usar un disparador para actualizar una tabla diferente en MySQL?
- 26. ¿Cómo optimizar una consulta TSQL?
- 27. ¿Solo disparar un evento una vez?
- 28. TSQL: Try-Catch Transacción en Gatillo
- 29. En SQL Server 2005, ¿puedo hacer una eliminación en cascada sin establecer la propiedad en mis tablas?
- 30. Cómo hacer el equivalente de un 'Tsql seleccionar a', en una tabla existente
Gracias Tom, Mitch y Steven – Fet