Question

J'utilise rarement Realy déclencheurs. Donc, j'ai rencontré un problème à la première fois. J'ai beaucoup de tables avec des déclencheurs (2 ou plus pour chaque table). Je voudrais savoir et changer l'ordre de tirer des déclencheurs pour chaque table. Est-il possible d'obtenir ces informations?

AJOUTÉE:

Voici un bon article enoght sur mssqltips J'ai trouvé.

Était-ce utile?

La solution

Vous pouvez utiliser le déclaration suivante à la liste tous les déclencheurs dans chaque tableau.

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

Une fois que vous trouvez tous les déclencheurs. Vous pouvez modifier manuellement l'ordre en utilisant sp_settriggerorder

text alt

Autres conseils

IIRC vous ne pouvez pas exactement garantir l'ordre que les déclencheurs (avec la même définition de ce qu'il faut réagir et quand) le feu pour une action donnée contre une table, pour un nombre donné d'éléments déclencheurs.

Vous pouvez bien s'il y a trois ou moins, que vous pouvez utiliser sp_settriggerorder ensemble le premier à être le premier, le dernier être le dernier, et celui au milieu d'avoir « non défini » l'ordre.

Si vos déclencheurs sont sensibles à l'ordre qui sont exécutées dans cela indique souvent que votre conception devient plus complexe qu'il doit être (généralement due à la croissance organique) et peut bénéficier de certains refactoring.

-- 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
  ;
Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top