Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

2 modi per restituire un elenco di trigger in un database di SQL Server utilizzando T-SQL

Se preferisci amministrare i tuoi database SQL Server eseguendo query T-SQL, invece di usare la GUI, ecco due opzioni per elencare tutti i trigger nel database corrente.

Opzione 1:la vista del catalogo sys.triggers

Puoi usare sys.triggers vista del catalogo di sistema per ottenere un elenco di tutti i trigger in un database.

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

Risultato:

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

Questa visualizzazione restituisce tutti i trigger con un tipo di trigger DML TR (trigger DML SQL) o TA (trigger DML Assembly (CLR). Restituisce sia i nomi dei trigger DML che i nomi dei trigger DDL (a differenza dell'opzione successiva, che restituisce solo i trigger DML).

Opzione 2 – La vista del catalogo sys.objects

Puoi anche usare sys.objects vista del catalogo di sistema per ottenere un elenco di trigger.

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

Risultato:

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

Nota che sys.objects elenca solo i trigger DML e non i trigger DDL.

Questo perché sys.objects restituisce solo oggetti con ambito schema. I nomi dei trigger DML sono nell'ambito dello schema, ma i nomi dei trigger DDL sono nell'ambito dell'entità padre. Se devi restituire i trigger DDL, usa sys.triggers .