Bra*_*don 11 triggers stored-procedures sql-server-2005
有几个存储过程通常由几个不同的系统调用,以便对我们数据库中的几个表进行维护.有些是自动化的,有些则不是.
其中一个表有一个列有时会关闭,我们不确定何时或为何发生这种情况.我想在表格上设置一个触发器,这样我就可以看到正在改变的内容以及何时更改,但知道哪个程序启动了修改也很有帮助.
是否可以从触发器获取存储过程的名称?如果没有,有没有其他方法来告诉什么导致修改?(我不是在谈论用户,在这种情况下用户的名字没有帮助).
你可以试试: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
Run Code Online (Sandbox Code Playgroud)
这是检索值的触发器部分:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4635 次 |
| 最近记录: |