Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

2 façons de renvoyer une liste de déclencheurs dans une base de données SQL Server à l'aide de T-SQL

Si vous préférez administrer vos bases de données SQL Server en exécutant des requêtes T-SQL, au lieu d'utiliser l'interface graphique, voici deux options pour répertorier tous les déclencheurs dans la base de données actuelle.

Option 1 - La vue du catalogue sys.triggers

Vous pouvez utiliser le sys.triggers vue du catalogue système pour obtenir une liste de tous les déclencheurs d'une base de données.

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

Résultat :

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

Cette vue renvoie tous les déclencheurs de type TR (déclencheur SQL DML) ou TA (déclencheur Assembly (CLR) DML). Elle renvoie à la fois les noms des déclencheurs DML et les noms des déclencheurs DDL (contrairement à l'option suivante, qui ne renvoie que les déclencheurs DML).

Option 2 - La vue du catalogue sys.objects

Vous pouvez également utiliser le sys.objects vue du catalogue système pour obtenir une liste des déclencheurs.

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');

Résultat :

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

Notez que sys.objects répertorie uniquement les déclencheurs DML et non les déclencheurs DDL.

C'est parce que sys.objects ne renvoie que des objets de portée de schéma. Les noms de déclencheur DML sont limités au schéma, mais les noms de déclencheur DDL sont définis par l'entité parent. Si vous devez renvoyer des déclencheurs DDL, utilisez sys.triggers .