Mon application est basée sur une base de données serveur SQL.
Tous les clients ont la même base de données, à l'exception des personnalisations.
Certaines personnalisations incluent: nouvelles tables, tables modifiées, vues personnalisées, déclencheurs personnalisés ...
Lorsque j'exécute la mise à jour du logiciel, certains scripts sont exécutés. Maintenant, je désactive manuellement les déclencheurs et les réactivent une fois les scripts terminés.
Quoi qu'il en soit, j'aimerais désactiver automatiquement tous les déclencheurs (qui sont activés, certains d'entre eux pourraient déjà être désactivés), puis les réactiver à la fin.
Ne pas réinventer le whell, comment faire cela?
Comment obtenir uniquement les déclencheurs actifs sur la base de données actuelle?
Une fois que je l’ai eu, je peux créer et exécuter le programme par programme.
DISABLE TRIGGER triggername ON TABLENAME
ENABLE TRIGGER triggername ON TABLENAME
select objectproperty(object_id('TriggerName'), 'ExecIsTriggerDisabled')
1 signifie vrai, 0 signifie faux évidemment
Utilisez la requête de Jeff O et modifiez-la un peu
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
ou l'ajouter en tant que clause where.
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;
est une solution complète
select * from sys.triggers
Ici object_id est pour la table donc en joignant sys.table
vous pouvez obtenir le nom de la table
Vous pouvez interroger la vue sys.triggers .
select so.name, text
from sysobjects so, syscomments sc
where type = 'TR'
and so.id = sc.id
and text like '%related_table_name%'
Voici la requête qui se produit lorsque vous effectuez une actualisation sur "Déclencheurs de base de données" dans SSMS.
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
En utilisant cela, j'ai créé une version (qui améliore la réponse acceptée) pour inclure les déclencheurs de base de données.
Notez la jointure à gauche et le contrôle COALESCE.
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
// Utiliser votre base de données
use [your_database_Name]
Select * from sys.triggers where is_disabled=0