Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

2 maneiras de retornar uma lista de gatilhos em um banco de dados SQL Server usando T-SQL


Se você preferir administrar seus bancos de dados SQL Server executando consultas T-SQL, em vez de usar a GUI, aqui estão duas opções para listar todos os gatilhos no banco de dados atual.


Opção 1 – A Exibição do Catálogo sys.triggers


Você pode usar os sys.triggers visualização do catálogo do sistema para obter uma lista de todos os gatilhos em um banco de dados.
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 |
+-------------------+----------+--------+-------------+

Essa exibição retorna todos os gatilhos com um tipo de TR (gatilho SQL DML) ou TA (gatilho DML Assembly (CLR)). Ele retorna nomes de gatilhos DML e nomes de gatilhos DDL (diferentemente da próxima opção, que retorna apenas gatilhos DML).

Opção 2 – A Exibição do Catálogo sys.objects


Você também pode usar o sys.objects visualização do catálogo do sistema para obter uma lista de acionadores.
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 |
+----------+-------------------+----------+--------+-------------+

Observe que sys.objects lista apenas acionadores DML e não acionadores DDL.

Isso ocorre porque sys.objects retorna apenas objetos com escopo de esquema. Os nomes de gatilho DML têm escopo de esquema, mas os nomes de gatilho DDL têm escopo definido pela entidade pai. Se você precisar retornar gatilhos DDL, use sys.triggers .