SQL Server 2008 では、トリガーを使用して、データベース内の特定のテーブルに加えられたすべての変更をキャプチャしています。私の目標は、変更全体をキャプチャすることです。つまり、データが挿入されているだけでなく、どのデータが挿入されているかを把握するためです。トリガーでは、DBCC INPUTBUFFER によって返された結果セットの EventInfo 列を使用して、現在実行中の SQL ステートメントを取得し、Parameters 列を使用して、使用されているパラメーターの数を取得しています。これはほとんどの場合に機能しますが、外部アプリケーションが ADO.NET を使用してクエリを実行する場合、または SSMS の [上位 200 行の編集] を使用して行が挿入/削除される場合、EventInfo にはパラメーター値がありません。
たとえば、文字列クエリがクエリ ウィンドウで実行された場合、または ADO.NET でパラメーター化されていない文字列クエリとして実行された場合、EventInfo は次のように表示されます。
INSERT INTO DTS_TABLE ([ID] ,[DTS_ID] ,[DTS] ,[TICS]) VALUES (10, 9, GETDATE(), 91234)
Edit Top 200 Rows または ADO.NET のパラメーター化されたクエリを使用して同じデータを挿入すると、EventInfo に次のように表示されます (読みやすくするために改行が追加されています)。
(@id int,@dtsid int,@dts datetime,@tics int)
INSERT INTO DTS_TABLE ([ID] ,[DTS_ID] ,[DTS] ,[TICS])
VALUES (@id, @dtsid, @dts, @tics)
トリガーのコンテキスト内でパラメーター値にアクセスする方法はありますか?