SQL Server 2005 の「hashbytes」関数から返された 16 進値を出力しているときに、同様の問題の解決策を探しているときに、この質問に遭遇しました。
悲しいことに、このバージョンの 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」の前に印刷できない文字があります-画像を投稿したいのですが、まだ十分なポイントがありません)。
編集:追加するだけです-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