在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
答案 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), '')