web-dev-qa-db-fra.com

Comment obtenir la liste des déclencheurs actifs sur une base de données?

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
11
LaBracca
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
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;

est une solution complète

3
fatih saki
select * from sys.triggers

Ici object_id est pour la table donc en joignant sys.table vous pouvez obtenir le nom de la table

2
Abhishek Jaiswal

Vous pouvez interroger la vue sys.triggers .

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

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
0
granadaCoder

// Utiliser votre base de données

use [your_database_Name]

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