Преобразование 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

Результаты:

len (@userCode) = 8

len (@temp_userCode) = 50

Почему @temp_userCode возвращается с длиной 50, и как я могу обрезать ее до исходной длины, чтобы сохранить ее правильно?

Дополнительная информация:

SQL Server 2005 запущен, однако решение должно работать во всех версиях 2005 вперед.

11
задан Aaron Bertrand 24 February 2012 в 17:26
поделиться