2014-12-04 49 views
0

我想用一些值(存储为NVARCHAR(128))设置CONTEXT_INFO,然后在其他位置读取该值并使用它创建一个xml变量。不幸的是,在选择有阅读更多的字符,不知道如何解决它。 代码以再现:context_info和nvarchar - 选择附加字符

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 toolks说:

<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 

回答

0

好吧,我得到了解决:

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