我想用一些值设置CONTEXT_INFO(存储为NVARCHAR(128)),然后在其他地方读取该值并用它创建一个xml变量。不幸的选择是阅读更多的角色,不知道如何解决它。 复制代码:
exec dbo.[SetConnectedUser] 'p'
DECLARE @contextInfo VARCHAR(128) = NULLIF(CAST(CONTEXT_INFO() as VARCHAR(128)), '')
SELECT @contextInfo AS 'ContextInfo'
FOR XML PATH('Message')
select @contextInfo, len(@contextInfo)
@contextInfo变量返回我为存储过程设置的内容,在本例中为' p'。但是这个变量的长度是128。
创建的xml工具:
<Message>
<ContextInfo>p�������������������������������������������������������������������������������������������������������������������������������</ContextInfo>
</Message>
如何删除这些不必要的字符?
程序:
CREATE PROCEDURE dbo.[SetConnectedUser](@userId VARCHAR(128))
AS
BEGIN
DECLARE @context VARBINARY(128)
SET @context = CAST(@UserId AS VARBINARY(128))
--SET CONTEXT_INFO 0x0
SET CONTEXT_INFO @context
END
答案 0 :(得分:0)
好的,我得到了解决方案:
SELECT REPLACE(@contextInfo COLLATE SQL_Latin1_General_CP1_CI_AS, CHAR(0) , '')