0

create および alter ストアド プロシージャの ddl トリガーを作成しています。

create ストアド プロシージャ トリガーについては、create ステートメントのスクリプトを取得したいと考えています。ストアド プロシージャ トリガーの変更については、ステートメントの変更ではなく、新しい「ストアド プロシージャの作成」ステートメントを取得したいと考えています。

それを行う方法はありますか?最初のものについては、eventdata() ができることを知っています。しかし、2番目のものについては、よくわかりません。

4

1 に答える 1

3

DDL トリガー内で、次を使用して手順の「後」イメージを取得できます。

DECLARE @EventData XML = EVENTDATA();

SELECT OBJECT_DEFINITION(OBJECT_ID(
   @EventData.value('(/EVENT_INSTANCE/SchemaName)[1]', 'NVARCHAR(255)')
   + '.' + 
   @EventData.value('(/EVENT_INSTANCE/ObjectName)[1]', 'NVARCHAR(255)')
));

したがって、その出力を変数に割り当てて、挿入の一部にすることができます(これを何らかのDDL監査テーブルに記録していると思います)。コメントで提案したように、次のこともできます。

DECLARE @EventData XML = EVENTDATA();

SELECT STUFF(@EventData.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'NVARCHAR(MAX)'), 
  1, 5, 'CREATE');

(これらはどちらも、DDL トリガーが ALTER_PROCEDURE に制限されていることを前提としています。それ以外の場合は、これらの操作を実行する前にイベントの種類を確認する必要があります。)

于 2012-06-05T19:07:52.797 に答える