Wenn man schnell eine Liste aller Trigger einer Datenbank benötigt, kann man entweder alle Tabellen einzeln durchsuchen, oder man sucht mit Hilfe von SQL Bordmitteln.
Eine schöne Methode fand ich bei Stackoverflow, die ich hier kurz wiedergeben möchte.
SELECT trigger_name = sysobjects.name, trigger_owner = USER_NAME(sysobjects.uid), table_schema = s.name, table_name = OBJECT_NAME(parent_obj), isupdate = OBJECTPROPERTY( id, 'ExecIsUpdateTrigger'), isdelete = OBJECTPROPERTY( id, 'ExecIsDeleteTrigger'), isinsert = OBJECTPROPERTY( id, 'ExecIsInsertTrigger'), isafter = OBJECTPROPERTY( id, 'ExecIsAfterTrigger'), isinsteadof = OBJECTPROPERTY( id, 'ExecIsInsteadOfTrigger'), [disabled] = OBJECTPROPERTY(id, 'ExecIsTriggerDisabled') FROM sysobjects INNER JOIN sysusers ON sysobjects.uid = sysusers.uid INNER JOIN sys.tables t ON sysobjects.parent_obj = t.object_id INNER JOIN sys.schemas s ON t.schema_id = s.schema_id WHERE sysobjects.type = 'TR'
Eine alternative Abfrage für SQL2000
SELECT trigger_name = o.name, trigger_owner = 'x'/*USER_NAME(o.uid)*/, table_schema = s.name, table_name = OBJECT_NAME(o.parent_obj), isupdate = OBJECTPROPERTY(o.id, 'ExecIsUpdateTrigger'), isdelete = OBJECTPROPERTY(o.id, 'ExecIsDeleteTrigger'), isinsert = OBJECTPROPERTY(o.id, 'ExecIsInsertTrigger'), isafter = OBJECTPROPERTY(o.id, 'ExecIsAfterTrigger'), isinsteadof = OBJECTPROPERTY(o.id, 'ExecIsInsteadOfTrigger'), [disabled] = OBJECTPROPERTY(o.id, 'ExecIsTriggerDisabled') FROM sysobjects o /*INNER JOIN sysusers ON sysobjects.uid = sysusers.uid*/ INNER JOIN sysobjects o2 ON o.parent_obj = o2.id INNER JOIN sysusers s ON o2.uid = s.uid WHERE o.type = 'TR'
Das SQL Skript gibt eine Liste der auf der Datenbank installierten Trigger aus und erspart sehr viel Sucharbeit.