2017-06-23 9 views
0

をパラメータ値を取得します。私はすべてのINSERT、UPDATEをログに記録し、別のテーブルにテーブルに対するアクションを削除するには、SQL Server 2012のテーブルにトリガを作成しました。私はhttp://sqlblog.com/blogs/jonathan_kehayias/archive/2010/01/11/tsql2sday-using-sys-dm-exec-sql-text-to-get-the-calling-statement.aspxでブログ記事からの私の最初のコードを得ました。ここでDBCC INPUTBUFFERから

テストテーブル用のスクリプト、私はテストテーブルに変更をログに記録していますテーブル、およびテストテーブルのトリガーです:

CREATE TABLE [dbo].[TestAddresses](
    [RecNo] [int] IDENTITY(1,1) NOT NULL, 
    [FirstName] [varchar](50) NULL, 
    [LastName] [varchar](50) NULL, 
    [Address] [varchar](50) NULL, 
    [City] [varchar](50) NULL, 
    [State] [varchar](2) NULL, 
    [Zip] [varchar](12) NULL 
) ON [PRIMARY] 

GO 
------------------------------------- 
CREATE TABLE [dbo].[TestAddressesLog](
    [RecNo] [int] IDENTITY(1,1) NOT NULL, 
    [Sql] [nvarchar](max) NULL, 
    [Timestamp] [datetime] NOT NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 

GO 

ALTER TABLE [dbo].[TestAddressesLog] ADD CONSTRAINT [DF_TestAddressesLog_Sql] DEFAULT (N'') FOR [Sql] 
GO 

ALTER TABLE [dbo].[TestAddressesLog] ADD CONSTRAINT [DF_TestAddressesLog_Timestamp] DEFAULT (getdate()) FOR [Timestamp] 
GO 
------------------------------------ 
ALTER TRIGGER [dbo].[TestAddressLogTrigger] 
    ON [dbo].[TestAddresses] 
    FOR INSERT, UPDATE, DELETE 
AS 
BEGIN 

    DECLARE @TEMP TABLE (EventType NVARCHAR(30), Parameters INT, EventInfo NVARCHAR(4000)) 
    INSERT INTO @TEMP EXEC('DBCC INPUTBUFFER(@@SPID)') 

    INSERT INTO TestAddressesLog (Sql) 
     SELECT EventInfo FROM @TEMP 
END 

これが標準のCRUD操作のための素晴らしい作品パラメータはありません。しかし、私の.NETコードは、以下の(例えば@NewStateに 'CA' として値を割り当てる)としてパラメータ化動作を実行するとき:

(@NewState int)UPDATE TestAddresses SET State = @NewState WHERE State = 'TX' 

I:私は次のような結果を得る

UPDATE TestAddresses SET State = @NewState WHERE State = 'TX' 

渡されたパラメータの値を取得し、記録する方法が必要です。誰にでもこれに対する解決策がありますか?仕事に行くのではないです

答えて

0

。唯一の方法は、拡張イベントを使用してRPC完了イベントをキャプチャして解析し、それらを持続することです。

関連する問題