web-dev-qa-db-de.com

Wie erhalte ich die Liste der aktiven Auslöser in einer Datenbank?

Meine Anwendung basiert auf einer SQL Server-Datenbank.

Alle Kunden haben die gleiche Datenbank mit Ausnahme von Anpassungen.

Einige Anpassungen umfassen: neue Tabellen, modifizierte Tabellen, benutzerdefinierte Ansichten, benutzerdefinierte Auslöser ...

Beim Ausführen des Software-Updates werden einige Skripts ausgeführt. Jetzt deaktiviere ich manuell die Trigger und kann sie wieder aktivieren, nachdem die Skripts fertig sind.

Jedenfalls möchte ich automatisch alle Auslöser deaktivieren (die aktiviert sind, einige davon könnten bereits deaktiviert sein) und sie am Ende wieder aktivieren.

Nicht um den Whell neu zu erfinden, wie geht das?

Wie bekomme ich nur die aktiven Auslöser für die aktuelle Datenbank?

Sobald ich das habe, kann ich das programmgesteuert erstellen und ausführen

DISABLE TRIGGER triggername ON TABLENAME

ENABLE TRIGGER triggername ON TABLENAME
11
LaBracca
select objectproperty(object_id('TriggerName'), 'ExecIsTriggerDisabled') 

1 bedeutet wahr, 0 bedeutet offensichtlich falsch

Verwenden Sie die Abfrage von Jeff O und ändern Sie sie ein wenig

SELECT  
       TAB.name as Table_Name 
     , TRIG.name as Trigger_Name
     , TRIG.is_disabled  --or objectproperty(object_id('TriggerName'), 'ExecIsTriggerDisabled')
FROM [sys].[triggers] as TRIG 
inner join sys.tables as TAB 
on TRIG.parent_id = TAB.object_id 

oder fügen Sie es als Where-Klausel hinzu.

where TRIG.is_disabled = 0 -- or 1 depends on what you want
20
Jaques
SELECT *
FROM sys.triggers
WHERE is_disabled = 0
11
Lamak
SELECT 
       TAB.name as Table_Name
     , TRIG.name as Trigger_Name  
FROM [sys].[triggers] as TRIG
inner join sys.tables as TAB
on TRIG.parent_id = TAB.object_id
6
JeffO
SELECT 
    TAB.name as Table_Name,
    TRIG.name as Trigger_Name,
    Comments.Text TriggerText
FROM [sys].[triggers] as TRIG
    Inner Join sys.tables as TAB on TRIG.parent_id = TAB.object_id
    Inner Join syscomments Comments On TRIG.object_id = Comments.id
WHERE
    TRIG.is_disabled = 0;

ist komplette Lösung

3
fatih saki
select * from sys.triggers

Hier ist object_id für die Tabelle. Wenn Sie sys.table beitreten, können Sie den Tabellennamen erhalten

2

Sie können die sys.triggers view abfragen.

1
Pondlife
select so.name, text
from sysobjects so, syscomments sc
where type = 'TR'
and so.id = sc.id
and text like '%related_table_name%'
1
Masum

Hier ist die Abfrage, die auftritt, wenn Sie "Datenbankauslöser" in SSMS aktualisieren.

SELECT
tr.name AS [Name],
'Server[@Name=' + quotename(CAST(
        serverproperty(N'Servername')
       AS sysname),'''') + ']' + '/Database[@Name=' + quotename(db_name(),'''') + ']' + '/DdlTrigger[@Name=' + quotename(tr.name,'''') + ']' AS [Urn],
tr.is_disabled AS [IsEnabled]
FROM
sys.triggers AS tr
WHERE
(tr.parent_class = 0)
ORDER BY
[Name] ASC

Damit habe ich eine Version erstellt (die die akzeptierte Antwort verbessert), um die Datenbankauslöser einzubeziehen.

Beachten Sie den linken Join und den COALESCE-Check.

SELECT  
       COALESCE(TAB.name, 'DATABASE') as TargetObjectName
     , TRIG.name as Trigger_Name
     , TRIG.is_disabled  --or objectproperty(object_id('TriggerName'), 'ExecIsTriggerDisabled')
     -- select *
FROM [sys].[triggers] as TRIG 
left join sys.tables as TAB 
on TRIG.parent_id = TAB.object_id 
WHERE
/* (TRIG.parent_class = 0) and */
TRIG.is_disabled = 0
0
granadaCoder

// Verwenden Sie Ihre Datenbank

use [your_database_Name]

Select * from sys.triggers where is_disabled=0
0
Sandy bhardwaj