在打印从 SQL Server 2005 中的“哈希字节”函数返回的十六进制值时,我在寻找类似问题的解决方案时遇到了这个问题。
可悲的是,在这个版本的 SQL Server 中,CONVERT 似乎根本不起作用,只有 fn_varbintohexsubstring 做正确的事情:
我做了:
DECLARE @binvalue binary(4)
SET @binvalue = 0x12345678
PRINT 'cast(@binvalue AS nvarchar): ' + CAST(@binvalue AS nvarchar)
PRINT 'convert(varchar(max), @binvalue, 0): ' + CONVERT(varchar(max), @binvalue, 0)
PRINT 'convert(varchar(max), @binvalue, 1): ' + CONVERT(varchar(max), @binvalue, 1)
PRINT 'convert(varchar(max), @binvalue, 2): ' + CONVERT(varchar(max), @binvalue, 2)
print 'master.sys.fn_varbintohexstr(@binvalue): ' + master.sys.fn_varbintohexstr(@binvalue)
这是我在 SQL Server 2005 中得到的结果(
cast(@binvalue AS nvarchar): 㐒硖
convert(varchar(max), @binvalue, 0): 4Vx
convert(varchar(max), @binvalue, 1): 4Vx
convert(varchar(max), @binvalue, 2): 4Vx
master.sys.fn_varbintohexstr(@binvalue): 0x12345678
(在 '4Vx's 之前实际上有一个不可打印的字符 - 我会发布一张图片,但我还没有足够的分数)。
编辑:只需添加 - 在 SQL Server 2008 R2 上,CONVERT 的问题已通过以下输出修复:
cast(@binvalue AS nvarchar): 㐒硖
convert(varchar(max), @binvalue, 0): 4Vx
convert(varchar(max), @binvalue, 1): 0x12345678
convert(varchar(max), @binvalue, 2): 12345678
master.sys.fn_varbintohexstr(@binvalue): 0x12345678