context_info和nvarchar - select上的其他字符

时间:2014-12-04 10:30:19

标签: tsql sql-server-2012

我想用一些值设置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&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;&#x0;</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

1 个答案:

答案 0 :(得分:0)

好的,我得到了解决方案:

SELECT REPLACE(@contextInfo COLLATE SQL_Latin1_General_CP1_CI_AS, CHAR(0) , '')