Pregunta

Realy rara vez usar disparadores. Así que me encontré con un problema en la primera vez. Tengo un montón de mesas con disparadores (2 o más para cada mesa). Me gustaría conocer y cambiar el orden de disparar disparadores para cada mesa. ¿Es posible obtener esta información?

AÑADIDO:

Esta es una buena enoght en mssqltips he encontrado.

¿Fue útil?

Solución

Puede utilizar el siguiente declaración para listar todos los disparadores en cada tabla.

EXEC sp_MSForEachTable 'PRINT ''?'' 
EXEC sp_helptrigger ''?'''

Una vez que averiguar todos los disparadores. Puede cambiar manualmente el orden usando sp_settriggerorder

text alt

Otros consejos

IIRC no se puede garantizar el orden exacto que los desencadenantes (con la misma definición de lo que debe reaccionar y cuando) el fuego para una acción determinada contra una mesa, para cualquier número dado de factores desencadenantes.

Puede aunque si hay tres o menos, ya que puede utilizar sp_settriggerorder al conjunto el primer ser el primero, el último de los últimos, y el que está en el medio de tener "indefinido" orden.

Si los factores desencadenantes son sensibles al orden que se ejecutan en esta frecuencia indica que su diseño es cada vez más compleja de lo que debe ser (por lo general debido al crecimiento orgánico) y puede beneficiarse de algunas refactorización.

-- List tables with triggers and their firing order.  By Jackson Jarvis.
SELECT [tbl].[name] AS 'Table'
      ,[trg].[name] AS 'Trigger'
      ,CASE OBJECTPROPERTY([trg].[id] ,'ExecIsFirstInsertTrigger')
            WHEN 0 THEN ''
            ELSE 'X'
       END AS 'Insert First'
      ,CASE OBJECTPROPERTY([trg].[id] ,'ExecIsLastInsertTrigger')
            WHEN 0 THEN ''
            ELSE 'X'
       END AS 'Insert Last'
      ,CASE OBJECTPROPERTY([trg].[id] ,'ExecIsFirstUpdateTrigger')
            WHEN 0 THEN ''
            ELSE 'X'
       END AS 'Update First'
      ,CASE OBJECTPROPERTY([trg].[id] ,'ExecIsLastUpdateTrigger')
            WHEN 0 THEN ''
            ELSE 'X'
       END AS 'Update Last'
      ,CASE OBJECTPROPERTY([trg].[id] ,'ExecIsFirstDeleteTrigger')
            WHEN 0 THEN ''
            ELSE 'X'
       END AS 'Delete First'
      ,CASE OBJECTPROPERTY([trg].[id] ,'ExecIsLastDeleteTrigger')
            WHEN 0 THEN ''
            ELSE 'X'
       END AS 'Delete Last'
  FROM            [sysobjects] AS [trg] WITH (NOLOCK)
       INNER JOIN [sysobjects] AS [tbl] WITH (NOLOCK)
            ON  [trg].[parent_obj] = [tbl].[id]
  WHERE [trg].[TYPE] IN (N'TR')
  ORDER BY
       [tbl].[name] ASC
      ,[trg].[name] ASC
  ;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top