私のアプリケーションはsql server dbに基づいています。
カスタマイズを除いて、すべてのお客様が同じdbを持っています。
一部のカスタマイズには、新しいテーブル、変更されたテーブル、カスタムビュー、カスタムトリガーなどがあります。
ソフトウェアアップデートを実行すると、いくつかのスクリプトが実行されます。ここで、手動でトリガーを無効にし、スクリプトの完了後に再度有効にします。
とにかく、すべてのトリガーを自動的に無効にして(有効になっている場合は、既に無効になっている可能性もあります)、最後に再度有効にします。
地獄を再発明しないために、それをどのように行うのですか?
現在のデータベースでアクティブなトリガーのみを取得する方法
これを取得したら、プログラムで作成して実行できます
DISABLE TRIGGER triggername ON TABLENAME
ENABLE TRIGGER triggername ON TABLENAME
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
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;
完全なソリューションです
select * from sys.triggers
ここで、object_idはテーブル用なので、sys.table
テーブル名を取得できます
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%'
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
//データベースを使用する
use [your_database_Name]
Select * from sys.triggers where is_disabled=0