我正在尝试使用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
长度(@temp_userCode)= 50
为什么@temp_userCode
变量以 50 的长度返回,我怎样才能将它修剪回原来的长度以正确存储它?
更多的信息:
运行 SQL Server 2005,但该解决方案需要在 2005 及以后的所有版本中工作。