Frage

Ich benutze wirklich selten Auslöser. Also habe ich zum ersten Mal ein Problem getroffen. Ich habe viele Tische mit Triggern (2 oder mehr für jeden Tisch). Ich würde gerne die Reihenfolge der Abfeuerauslöser für jeden Tisch kennen und ändern. Ist es möglich, diese Informationen zu erhalten?

HINZUGEFÜGT:

Hier ist ein guter Enoght Artikel über MSSQLTIPS Ich habe gefunden.

War es hilfreich?

Lösung

Du kannst den ... benutzen folgen Anweisung zur Auflistung aller Auslöser in jeder Tabelle.

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

Sobald Sie alle Trigger herausgefunden haben. Sie können die Reihenfolge manuell verwenden SP_SettriggerOrder

alt text

Andere Tipps

IIRC Sie können nicht genau die Reihenfolge garantieren, die (mit der gleichen Definition des Reagierens von und wann) für eine bestimmte Aktion gegen eine Tabelle für eine bestimmte Anzahl von Triggern ausgelöst wird.

Sie können jedoch, wenn es drei oder weniger gibt, wie Sie es verwenden können SP_SettriggerOrder Um den ersten zu setzen, um den ersten zu sein, der letzte war der letzte und der in der Mitte, um "undefinierte" Ordnung zu haben.

Wenn Ihre Auslöser empfindlich auf die Reihenfolge reagieren, die in diesem Fall häufig ausgeführt werden, zeigt dies häufig an, dass Ihr Design komplexer wird, als es sein muss (normalerweise aufgrund des organischen Wachstums) und möglicherweise von einigen Refactoring profitieren.

-- 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
  ;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top