2016-09-20 12 views
1

私は、トリガーの実行を無効にするために使用できるテーブルを作成したいと考えています(データベースの値に応じて個別にオンとオフを切り替えます)。私はテーブル名とトリガ名を使ってこれを行うことに興味があり、複数のトリガを考慮して興味のある質問につながりました。トリガーの実行中にその名前とその実行テーブルなどのトリガーに関する情報を取得することは可能ですか?トリガの実行中にトリガに関する情報を取得することは可能ですか?

+1

データベースシステムのタグを追加してください。トリガは製品固有のものです。 [tag:sql]は特定の製品ではなく、標準のSQL言語を指します。 –

+2

しかし、私が認識しているほとんどのデータベースシステムでは、「一般的な」トリガーを書く本当の方法はありません - それぞれのトリガーはそれが適用される各テーブルに対してカスタマイズされなければならないので、通常は何もする必要はありませんランタイム・ディスカバリーを実行することができます。 –

答えて

2

SQL Serverでは、@@ PROCID関数とOBJECT_NAME関数を使用して、実行中のトリガ(またはストアドプロシージャ)の名前を取得できます。たとえば、

CREATE TABLE MyTable (SomeColumn INT) 

GO 
CREATE TRIGGER MyTrigger ON dbo.MyTable 
FOR INSERT 
AS 
PRINT OBJECT_NAME(@@PROCID) 
DECLARE @TableName sysname 
SET @TableName=(SELECT OBJECT_NAME(parent_object_id) FROM sys.objects WHERE [email protected]@PROCID) 
PRINT @TableName 

GO 
INSERT INTO dbo.MyTable (SomeColumn) VALUES (1) 
+1

しかし、私が言ったように、このトリガーを書き込んで複数のテーブルに適用する方法はありません。たとえば、動的SQLを介して複数のトリガを生成する場合は、トリガ本体の 'MyTrigger'と' MyTable'の値を 'CREATE TRIGGER'行に挿入するのと同時に置き換えることもできます。 –

関連する問題