2012-03-09 19 views
10

私のアプリケーションは、SQL Serverデータベースに基づいています。データベース上のアクティブなトリガのリストを取得する方法は?

すべての顧客には、カスタマイズ以外は同じdbがあります。

いくつかのカスタマイズが含まれます:新しいテーブル、変更された表、カスタムビューを、私はいくつかのスクリプトが実行されているソフトウェアアップデートを実行すると、カスタムが...

をトリガします。今私は手動でトリガーを無効にし、スクリプトが完了した後に再び有効にします。

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

こんにちは、どうすればいいですか?

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

私はプログラム的に作成し、

DISABLE TRIGGER triggername ON TABLENAME 

ENABLE TRIGGER triggername ON TABLENAME 
+0

が重複する可能性をis_disaabled sys.triggersからデータベース [データベース名]を使用し

選択*を使用してください:トリガーがあるかどうかを確認有効または無効?](http:// stackoverflow。質問:8136937/sql-server-check-a-trigger-is-enabled-or-disabled) – michaelAngelo

答えて

19
select objectproperty(object_id('TriggerName'), 'ExecIsTriggerDisabled') 

1真の意味、0は偽明らか

利用ジェフOのクエリを意味し、ビット

またはWHERE句として追加し、それを修正します。

where TRIG.is_disabled = 0 -- or 1 depends on what you want 
+0

すべてが正しかったとしても、これを答えとして選択します。これは単に「完璧」です。 – LaBracca

+1

注:「データベーストリガー」には関連付けられたテーブルがないため、「parent_id」は0です。したがって、上記の「内部結合」は一致しません。将来の読者のために、これは受け入れられた答えです。 – granadaCoder

1

あなたはsys.triggersビューを照会することができます実行することができます。

9
SELECT * 
FROM sys.triggers 
WHERE is_disabled = 0 
5
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 
3
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; 

あなたはここで、テーブル名

2
select * from sys.triggers 

完全なソリューションですあなたが行う場合に発生するクエリです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

を得ることができますsys.table入社からので、ここでのobject_idがテーブルのためである

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

これは私の2005年のデータベースでうまくいきました。ありがとう。 –

0

// [SQL Serverのの= 0

+0

あなたはあなたの答えを詳述できますか? –

関連する問題