web-dev-qa-db-ja.com

データベースのアクティブなトリガーのリストを取得するにはどうすればよいですか?

私のアプリケーションはsql server dbに基づいています。

カスタマイズを除いて、すべてのお客様が同じdbを持っています。

一部のカスタマイズには、新しいテーブル、変更されたテーブル、カスタムビュー、カスタムトリガーなどがあります。

ソフトウェアアップデートを実行すると、いくつかのスクリプトが実行されます。ここで、手動でトリガーを無効にし、スクリプトの完了後に再度有効にします。

とにかく、すべてのトリガーを自動的に無効にして(有効になっている場合は、既に無効になっている可能性もあります)、最後に再度有効にします。

地獄を再発明しないために、それをどのように行うのですか?

現在のデータベースでアクティブなトリガーのみを取得する方法

これを取得したら、プログラムで作成して実行できます

DISABLE TRIGGER triggername ON TABLENAME

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

1は真を意味し、0は明らかに偽を意味します

ジェフOのクエリを使用して少し修正する

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 

または、where句として追加します。

where TRIG.is_disabled = 0 -- or 1 depends on what you want
21
Jaques
SELECT *
FROM sys.triggers
WHERE is_disabled = 0
12
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;

完全なソリューションです

3
fatih saki
select * from sys.triggers

ここで、object_idはテーブル用なので、sys.tableテーブル名を取得できます

2

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

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

それを使用して、データベーストリガーを含めるバージョン(承認された回答を強化する)を作成しました。

左結合と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

//データベースを使用する

use [your_database_Name]

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