有张表TEST;里面的字段cola出现了负数的特殊记录,我想找到是那个存储过程插入的;现在要通过触发器实现,在触发器里面如何获取对应的存储过程名称?
我刚才写了个触发器如下test_insert,还有个存储过程 testinsert20230406JK,但是在下面的@procname中每次都是获取到的为触发器名test_insert,而不是存储过程的名称,这个应该如何修改
ALTER TRIGGER [dbo].[test_insert]
ON [dbo].[Test]
AFTER insert
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
declare @colval int
declare @procname nvarchar(100)=''
select @colval=s.colval from inserted s ;
SELECT @procname=OBJECT_NAME(@@PROCID) ;
if(@colval>10)
begin
insert into TestLog(logval,logprocename)
values(@colval,@procname)
end
END
引用新必应
触发器可以在数据库表上设置,用于在数据插入、修改或删除时自动触发一些动作。在SQL Server中,可以使用EVENTDATA函数获取触发器在发生事件时提供的信息,包括存储过程名称等。
具体来说,在触发器中可以使用以下语句来获取存储过程名称:
SELECT OBJECT_NAME(@@PROCID)
其中,@@PROCID是一个全局变量,用于表示当前执行的存储过程的ID。使用OBJECT_NAME()函数将该ID转换为存储过程的名称。
因此,在你的触发器中,你可以使用以上代码获取相应的存储过程名。需要注意的是,如果该特殊记录是手动插入的,则无法通过该方法获取存储过程名。
不知道你这个问题是否已经解决, 如果还没有解决的话: