2009-08-07 11 views
4

私は特定のテーブルのDDLトリガーを作成しようとしていると、これは私が思い付くことが最高です:特定のテーブルのDDLトリガーを作成するには?

CREATE TRIGGER MyTrigger 
ON DATABASE 
FOR DDL_TABLE_EVENTS 
AS 
DECLARE @EventData  xml 
SET @EventData=EVENTDATA() 

IF @EventData.value('(/EVENT_INSTANCE/ObjectType)[1]', 'varchar(50)')='TABLE' 
    AND @EventData.value('(/EVENT_INSTANCE/ObjectName)[1]', 'varchar(50)') ='MyTable' 
BEGIN 
    --do something special here!! 
END 
GO 

が、これは実際にそれを行うための唯一の方法ですか?どこにでも見えましたが、特定のテーブルにトリガーを作成する構文が見つかりませんでした。私は、xml EVENTDATA()を使用することが本当にばかげていると思います。

答えて

2

はい。それはそれを行う方法です。 DDLトリガーは、個々のオブジェクトではなくデータベースに関連付けられます。その結果、特定のオブジェクトでのみ発生するDDLイベントに直接サブスクライブすることはできません。

1

オブジェクトの特定のインスタンスではなく、DDL_TABLE_EVENTS(またはALTER_TABLEまたは `DROP_TABLE)などのDDLトリガーがオブジェクトカテゴリに関連するアクションに対して起動します。

Ref。 Designing DDL Triggers

関連する問題