Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

2 Möglichkeiten zum Zurückgeben einer Liste von Triggern in einer SQL Server-Datenbank mit T-SQL

Wenn Sie es vorziehen, Ihre SQL Server-Datenbanken durch Ausführen von T-SQL-Abfragen zu verwalten, anstatt die GUI zu verwenden, finden Sie hier zwei Optionen zum Auflisten aller Trigger in der aktuellen Datenbank.

Option 1 – Die sys.triggers-Katalogansicht

Sie können die sys.triggers verwenden Systemkatalogansicht, um eine Liste aller Trigger in einer Datenbank zu erhalten.

USE Test;
SELECT 
  name,
  OBJECT_NAME(parent_id) AS parent,
  type,
  type_desc
FROM sys.triggers;

Ergebnis:

+-------------------+----------+--------+-------------+
| name              | parent   | type   | type_desc   |
|-------------------+----------+--------+-------------|
| t1_insert_trigger | t1       | TR     | SQL_TRIGGER |
| t6ins             | t6       | TR     | SQL_TRIGGER |
+-------------------+----------+--------+-------------+

Diese Ansicht gibt alle Trigger vom Typ TR (SQL DML-Trigger) oder TA (Assembly (CLR) DML-Trigger) zurück. Sie gibt sowohl DML-Triggernamen als auch DDL-Triggernamen zurück (anders als die nächste Option, die nur DML-Trigger zurückgibt).

Option 2 – Die sys.objects-Katalogansicht

Sie können auch die sys.objects verwenden Systemkatalogansicht, um eine Liste der Auslöser zu erhalten.

USE Test;
SELECT
  SCHEMA_NAME(schema_id) AS [schema],
  name,
  OBJECT_NAME(parent_object_id) AS parent,
  type,
  type_desc
FROM sys.objects
WHERE type IN ('TR', 'TA');

Ergebnis:

+----------+-------------------+----------+--------+-------------+
| schema   | name              | parent   | type   | type_desc   |
|----------+-------------------+----------+--------+-------------|
| dbo      | t1_insert_trigger | t1       | TR     | SQL_TRIGGER |
| dbo      | t6ins             | t6       | TR     | SQL_TRIGGER |
+----------+-------------------+----------+--------+-------------+

Beachten Sie, dass sys.objects listet nur DML-Trigger und keine DDL-Trigger auf.

Das liegt daran, dass sys.objects gibt nur schemabezogene Objekte zurück. DML-Triggernamen sind schemabezogen, aber DDL-Triggernamen werden von der übergeordneten Entität begrenzt. Wenn Sie DDL-Trigger zurückgeben müssen, verwenden Sie sys.triggers .