sql >> Base de Datos >  >> RDS >> Sqlserver

2 formas de devolver una lista de disparadores en una base de datos de SQL Server usando T-SQL

Si prefiere administrar sus bases de datos de SQL Server ejecutando consultas T-SQL, en lugar de usar la GUI, aquí hay dos opciones para enumerar todos los activadores en la base de datos actual.

Opción 1:la vista de catálogo de sys.triggers

Puede usar sys.triggers vista de catálogo del sistema para obtener una lista de todos los disparadores en una base de datos.

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

Resultado:

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

Esta vista devuelve todos los activadores con un tipo de TR (activador DML de SQL) o TA (activador DML de ensamblado (CLR)). Devuelve tanto los nombres de activadores DML como los nombres de activadores DDL (a diferencia de la siguiente opción, que solo devuelve activadores DML).

Opción 2:la vista de catálogo de sys.objects

También puede usar sys.objects vista de catálogo del sistema para obtener una lista de disparadores.

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

Resultado:

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

Tenga en cuenta que sys.objects solo muestra activadores DML y no activadores DDL.

Esto se debe a que sys.objects solo devuelve objetos del ámbito del esquema. Los nombres de desencadenadores DML tienen un alcance de esquema, pero los nombres de desencadenadores DDL tienen un alcance de la entidad principal. Si necesita devolver activadores DDL, use sys.triggers .