如何从SQL Server中的VARCHAR()中删除尾随CHAR(0)?

时间:2014-01-22 12:08:23

标签: sql sql-server xml

在Microsoft SQL Server中,我尝试将varchar()字符串传递给触发器,方法是将varbinary()存储到上下文信息中。

通过CONTEXT_INFO本身传递数据不是问题。

我的问题是,我必须将varchar()转换为varbinary()才能将数据传递给上下文信息,转换回varchar()会产生尾随{{} 1}}字符,我无法正常处理。

我试图找到CHAR(0)的第一个索引到一个新的正确字符串,但没有成功。此外,其他内置函数无法正确处理CHAR(0)个字符。

可是:

  • CHAR(0) =>总是返回128,
  • LEN() =>找不到CHARINDEX()
  • CHAR(0) =>不修剪不可打印的RTRIM()字符,
  • CHAR(0) =>不替换REPLACE()
  • 执行时
  • 例外:

    CHAR(0)

特别需要传递的字符串,如纯文本,没有尾随空格/ CHAR(0)将字符串放入xml。

PS:xml中的BINARY BASE64表示不是我可以使用的选项!

这是一个测试SQL脚本

SELECT * FROM (SELECT (@textbin) AS [blabla]) AS [result] FOR XML

1 个答案:

答案 0 :(得分:1)

正如Darka注意到的那样,

这是一个问题的副本: What is the Null Character literal in TSQL?

...谢谢你给我看。

此更改修复了我的代码:

SET @textbin = REPLACE(CAST(CAST(CONTEXT_INFO() AS VARCHAR(128)) COLLATE SQL_Latin1_General_CP1_CI_AS AS VARCHAR(128)), CHAR(0), '')