gpt4 book ai didi

sql-server-2005 - 触发器是否可以找到修改数据的存储过程的名称?

转载 作者:行者123 更新时间:2023-12-04 02:28:35 25 4
gpt4 key购买 nike

有一些存储过程通常会被一些不同的系统调用,以对我们数据库中的一些表进行维护。有些是自动的,有些不是。

其中一张表有一列,其中的数字有时会关闭,我们不确定何时或为什么会发生这种情况。我想在表上放置一个触发器,以便我可以看到正在更改的内容和时间,但了解哪个过程启动了修改也很有帮助。

是否可以从触发器中获取存储过程的名称?如果没有,有没有其他方法可以说明是什么导致了某些内容被修改? (我也不是在谈论用户,在这种情况下,用户名没有帮助)。

最佳答案

你可以试试:CONTEXT_INFO
这是一个 CONTEXT_INFO 用法示例:

在执行要跟踪的插入/删除/更新的每个过程中,添加以下内容:

DECLARE @string        varchar(128)
,@CONTEXT_INFO varbinary(128)
SET @string=ISNULL(OBJECT_NAME(@@PROCID),'none')
SET @CONTEXT_INFO =cast('Procedure='+@string+REPLICATE(' ',128) as varbinary(128))
SET CONTEXT_INFO @CONTEXT_INFO

--do insert/delete/update that will fire the trigger

SET CONTEXT_INFO 0x0 --clears out the CONTEXT_INFO value

这是用于检索值的触发器部分:
DECLARE @string         varchar(128)
,@sCONTEXT_INFO varchar(128)
SELECT @sCONTEXT_INFO=CAST(CONTEXT_INFO() AS VARCHAR) FROM master.dbo.SYSPROCESSES WHERE SPID=@@SPID

IF LEFT(@sCONTEXT_INFO,9)='Procedure'
BEGIN
SET @string=RIGHT(RTRIM(@sCONTEXT_INFO),LEN(RTRIM(@sCONTEXT_INFO))-10)
END
ELSE
BEGIN --optional failure code
RAISERROR('string was not specified',16,1)
ROLLBACK TRAN
RETURN
END

..use the @string

关于sql-server-2005 - 触发器是否可以找到修改数据的存储过程的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4261278/

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