をパラメータ値を取得します。私はすべての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'
渡されたパラメータの値を取得し、記録する方法が必要です。誰にでもこれに対する解決策がありますか?仕事に行くのではないです