gpt4 book ai didi

sql - 通过表触发器捕获存储过程参数

转载 作者:行者123 更新时间:2023-12-01 06:48:51 25 4
gpt4 key购买 nike

我有一个表,它有一个与之关联的触发器,用于更新、插入和删除。触发器工作正常并执行。这是我的触发器的代码:

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'

但是,如果我使用 SQLCommand 对象从我的 .NET 应用程序运行该过程,则 TSQL 字段不会显示参数:
sp_TestInsert;1

如果我在从 .NET 执行这个存储过程时打开它的探查器,这就是我看到的:
exec sp_TestInsert @val1='paramdata 1',@val2='paramdata 2' 

然而,审计表仍然显示
sp_TestInsert;1

有没有办法可以检索通过存储过程传递的参数?

编辑:
根据存储过程,它将在具有触发器的表中插入/更新/删除数据

编辑 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

最佳答案

这是执行没有参数的存储过程。分号表示sql中语句的结束。

sp_TestInsert;1

我想这就是你要找的

sp_TestInsert 1

这是假设“sp_TestInsert;1”是您从代码传递到 sql server 的内容。

关于sql - 通过表触发器捕获存储过程参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1608392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com