标签: context-info

SQL Server中CONTEXT_INFO的范围是什么?

我正在使用CONTEXT_INFO将用户名传递给删除触发器,以用于审计/历史记录表.我试图理解CONTEXT_INFO的范围,如果我正在创造潜在的竞争条件.

我的每个数据库表都有一个存储过程来处理删除.delete stored proc将userId作为参数,并将CONTEXT_INFO设置为userId.我的删除触发器然后抓取CONTEXT_INFO并使用它来更新指示谁删除了行的审计表.

问题是,如果两个删除来自不同用户的sprocs同时执行,其中一个sprocs中设置的CONTEXT_INFO是否会被另一个sproc触发的触发器消耗?

我已经看过这篇文章http://msdn.microsoft.com/en-us/library/ms189252.aspx但是我不清楚SQL Server中的会话和批处理的范围,这是本文有用的关键!

我发布了代码,但此刻时间很短.如果不够清楚我会稍后编辑.

在此先感谢您的帮助.

sql-server triggers stored-procedures sql-server-2008 context-info

23
推荐指数
2
解决办法
2万
查看次数

将CONTEXT_INFO转换为varchar以及生成的长度

我正在尝试将用户CONTEXT_INFO代码从存储过程传递到DELETE触发器以进行表审计.

一切正常,但是我注意到审计表中保存的用户代码的长度不正确.

以此脚本为例......

declare @userCode varchar(50)
set @userCode = 'TestUser'

declare @binary_userCode varbinary(128)
set @binary_userCode = cast(@userCode as varbinary(128))
set CONTEXT_INFO @binary_userCode

declare @temp_userCode varchar(50)
set @temp_userCode = (select cast(CONTEXT_INFO() as varchar(50)))

--set @temp_userCode = rtrim(ltrim(@temp_userCode))

select @userCode, len(@userCode), @temp_userCode, len(@temp_userCode)

set CONTEXT_INFO 0x
Run Code Online (Sandbox Code Playgroud)

结果:

len(@userCode)= 8

len(@temp_userCode)= 50

为什么@temp_userCode变量的长度为50,如何将其修剪回原始长度以正确存储?

更多的信息:

运行SQL Server 2005,但该解决方案需要在2005年以后的所有版本中运行.

sql-server varchar sql-server-2005 varbinary context-info

11
推荐指数
1
解决办法
3942
查看次数