Pregunta

Tengo un par de disparadores en una mesa que quiero conservar. separado y me gustaría darles prioridad.

Podría tener solo un disparador y hacer la lógica allí, pero me preguntaba si había una manera más fácil/lógica de lograr esto al tenerlo en un orden predefinido.

¿Fue útil?

Solución

Utilice sp_settriggerorder.Puede especificar el primer y último disparador que se activará según la operación.

sp_settriggerorder en MSDN

Desde el enlace de arriba:
A.Establecer el orden de activación de un activador DML
El siguiente ejemplo especifica que el desencadenador uSalesOrderHeader sea el primer desencadenador que se active después de que se produzca una operación ACTUALIZAR en la tabla Sales.SalesOrderHeader.

USE AdventureWorks;
GO
sp_settriggerorder 
    @triggername= 'Sales.uSalesOrderHeader', 
    @order='First', 
    @stmttype = 'UPDATE';

B.Establecer el orden de activación de un disparador DDL
El siguiente ejemplo especifica que el desencadenador ddlDatabaseTriggerLog sea el primer desencadenador que se active después de que se produzca un evento ALTER_TABLE en la base de datos AdventureWorks.

USE AdventureWorks;
GO
sp_settriggerorder 
    @triggername= 'ddlDatabaseTriggerLog', 
    @order='First', 
    @stmttype = 'ALTER_TABLE', 
    @namespace = 'DATABASE';

Otros consejos

Ver aquí.

Puedes usar sp_settriggerorder para definir el orden de cada activador en una tabla.

Sin embargo, yo diría que sería mucho mejor tener un único disparador que haga varias cosas.Esto es particularmente entonces si el orden es importante, ya que esa importancia no será muy obvia si tienes múltiples desencadenantes.Imagínese a alguien intentando respaldar la base de datos meses o años después.Por supuesto, es probable que haya casos en los que necesite tener varios activadores o que realmente sea un mejor diseño, pero empezaría a suponer que debería tener uno y trabajar desde allí.

Recuerde que si cambia el orden de activación, alguien más podría venir más tarde y reorganizarlo nuevamente.¿Y dónde documentaría cuál debería ser el orden de activación para que un desarrollador de mantenimiento sepa que no debe alterar el orden o las cosas se estropearán?Si definitivamente se deben realizar dos tareas desencadenantes en un orden específico, la única ruta segura es colocarlas en el mismo desencadenador.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top