unir tablas relacionadas inner hacer ejemplos diferentes datos consultas consultar consulta como sql sql-server-2005 tsql triggers

sql - tablas - ¿Cómo se priortiza múltiples factores desencadenantes de una tabla?



unir dos tablas sql server (4)

Puede 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 muchas cosas. Esto es particularmente cierto si el orden es importante, ya que esa importancia no será muy obvia si tiene múltiples factores desencadenantes. Imagínese que alguien intenta respaldar la base de datos meses / años en la pista. Por supuesto, es probable que existan casos en los que necesite tener múltiples factores desencadenantes o que realmente sea un mejor diseño, pero comenzaría a suponer que debería tener uno y trabajar desde allí.

Tengo un par de factores desencadenantes en una tabla que quiero mantener separados y me gustaría priortizarlos.

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


Recuerda que si cambias 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 meterse con el orden o las cosas se romperán? Si dos tareas desencadenantes definitivamente deben realizarse en un orden específico, la única ruta segura es ponerlas en el mismo desencadenador.


Use sp_settriggerorder. Puede especificar el primer y el último disparador para disparar dependiendo de la operación.

sp_settriggerorder en MSDN

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

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

B. Configurar el orden de encendido para un disparador DDL
El siguiente ejemplo especifica que trigger ddlDatabaseTriggerLog sea el primer disparador que se active después de que ocurra un evento ALTER_TABLE en la base de datos de AdventureWorks.

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