У меня есть таблица, с которой связан триггер для обновления, вставки и удаления. Триггер работает нормально и выполняется. Вот код для моего триггера:
CREATE trigger [dbo].[trg_audit_TableName]
ON [dbo].viewLayers
FOR INSERT, UPDATE, DELETE
AS
SET NOCOUNT ON
declare @inputbuffer table (EventType nvarchar(30),Parameters int,EventInfo nvarchar(4000))
insert into @inputbuffer exec('dbcc inputbuffer('+@@Spid+')')
declare @ins int
declare @del int
select @ins = count(*) from inserted
select @del = count(*) from deleted
insert into audit_TableName (eventtime, CurrentMachine, appName, CurrentUser, eventtype, tsql)
select getdate(), host_name(), APP_NAME(), suser_sname(),
case
when isnull(@ins, 0) > 0 and isnull(@del, 0) > 0 then 'update'
when isnull(@ins, 0) > 0 and isnull(@del, 0) = 0 then 'insert'
else 'delete'
end,
EventInfo
from @inputbuffer
Теперь, если я запускаю хранимую процедуру из Management Studio, данные TSWL, вставленные в таблицу, выглядят так:
sp_TestInsert 'paramdata 1', 'paramdata 2'
Но, если я запускаю процедуру из моего приложения .NET с использованием объекта SQLCommand, поле TSQL не показывает параметры:
sp_TestInsert;1
Если я открою профилировщик для этой хранимой процедуры, когда она выполняется из .NET, это то, что я вижу:
exec sp_TestInsert @val1='paramdata 1',@val2='paramdata 2'
Тем не менее, таблица аудита по-прежнему показывает
sp_TestInsert;1
Есть ли способ получить параметры, переданные с помощью хранимой процедуры?
EDIT:
В зависимости от хранимой процедуры, она будет вставлять / обновлять / удалять данные в таблице, в которой есть триггер
РЕДАКТИРОВАТЬ 2:
Вот очень краткий пример выполнения .NET («conn» - мой объект SQLConnection):
Using cmd As SqlCommand = conn.CreateCommand
cmd.CommandType = CommandType.StoredProcedure
cmd.CommandText = "sp_TestInsert"
cmd.Parameters.AddWithValue("@val1", "paramdata 1")
cmd.Parameters.AddWithValue("@val2", "paramdata 2")
cmd.ExecuteNonQuery()
End Using