2009-03-26 8 views
1

SQL 2008でサーバーレベルのトリガーを作成して、テーブルの作成と削除をログに記録しています。テーブルが作成された/ドロップされたデータベースを記録する必要があります。最初にdb_name()のデフォルト値を持つ列を作成しましたが、これは常にマスターを記録しました。次の私は、私のINSERT文でこれを使用してみました:DDLトリガーからデータベース名を取得

EVENTDATA().value('(/EVENT_INSTANCE/DatabaseName)[1]','nvarchar(max)') 

これは、しばらくの間、働いたが、突然、それはすべてのテーブルの創作のためのマスターを記録し始め、関係なく、テーブルがしていたデータベースの低下テーブル滴のすべてを持っています。 SSMSを使って行われました。なぜ誰かがこの行動を見ているのか分かりませんか?さらに重要なのは、誰も正しいデータベースをログに記録する方法を知っていますか?

編集:私がやっていることが間違っていると思う記事を見つけました。明らかに、server_scopedトリガではなく、データベーススコープ付きトリガからのみcreate_tableとdrop_tableをキャプチャする必要があります。私はまだ誰かがこれを回避する方法を知っている場合でも、質問を開いたままにしたいと思う。

答えて

2

HI、

あなたは、CREATE TABLEとDROP TABLEイベントがデータベースレベルで定義されているDDLトリガ内から記録されなければならない、正しいです。

サーバーレベルのトリガーは、たとえば、ログインが発生したときなど、サーバー全体のイベントを対象としています。

ここでは、開発に役立つ優れた記事です。

http://www.developer.com/db/article.php/3552096

DDLイベントは、データベースまたはサーバーのスコープのいずれかで焼成することができ、次のrefenceの詳細。

http://msdn.microsoft.com/en-us/library/ms189871(SQL.90).aspx 乾杯、MSDNのリンクの

+0

感謝。私はリストのMSDNを検索し、それを見つけることができませんでした。 – jhale

+0

あなたのお手伝いをさせていただきありがとうございます。 –

関連する問題