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
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
SELECT *
FROM sys.triggers
WHERE is_disabled = 0
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
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
select * from sys.triggers
Hier ist object_id für die Tabelle. Wenn Sie sys.table
beitreten, können Sie den Tabellennamen erhalten
Sie können die sys.triggers view abfragen.
select so.name, text
from sysobjects so, syscomments sc
where type = 'TR'
and so.id = sc.id
and text like '%related_table_name%'
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
// Verwenden Sie Ihre Datenbank
use [your_database_Name]
Select * from sys.triggers where is_disabled=0