【发布时间】:2012-02-24 16:47:00
【问题描述】:
我正在尝试使用 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
结果:
len(@userCode) = 8
len(@temp_userCode) = 50
为什么@temp_userCode 变量返回长度为 50,如何将其修剪回原始长度以正确存储?
更多信息:
运行 SQL Server 2005,但是该解决方案需要在 2005 以后的所有版本中运行。
【问题讨论】:
标签: sql-server sql-server-2005 varchar varbinary context-info