Estoy tratando de usar CONTEXT_INFO
para pasar un usercode de un procedimiento almacenado a un desencadenador DELETE para fines de auditoría de tabla.Casting CONTEXT_INFO para varchar y la longitud resultante
Todo funciona bien, sin embargo, noté que la longitud del código de usuario guardado en la tabla de auditoría no era correcta.
Tome este script como un ejemplo ...
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
Resultados:
len (@userCode) = 8
len (@temp_userCode) = 50
¿Por qué regresa la variable @temp_userCode
con una longitud de 50, y cómo puedo recortarla a su longitud original para almacenarla? ¿Ctly?
información:
que ejecuta SQL Server 2005, sin embargo, la solución tiene que trabajar en todas las versiones 2005 y siguientes.
Esto funciona sin embargo tuve que cambiar la intercalación de SQL_Latin1_General_CP437_BIN. Esto se basó en prueba y error, sin embargo, que no me deja con mucha confianza. ¿Cómo puedo aclarar qué colación debo usar? –
@Poz: no indicó la versión de SQL Server en su pregunta. Si antes de 2008, las intercalaciones '100' no estarán disponibles. –
Disculpas. Estoy ejecutando 2005, sin embargo, también debe ser adecuado para todas las versiones anteriores. –