SQL Server十六进制字符串到varbinary转换

Mat*_*eir 2 sql string type-conversion varbinary

好吧,问题是需要在2个表上进行合并或连接.一个文件内容存储为[image]类型或varbinary(max),另一个文件内容存储为十六进制字符串.如果我将相同的内容上传到两个表中

字符串(bytearray到string)的内容看起来像这样......

'application/vnd.xfdl;content-encoding="base64-gzip"
H4sIAAAAAAAAC+y9e1fjONI4/H9/Cg173idwFgIJl+5m6MzPJAayE+KsnXQPs8+cHJMY8HZi57ET
aObMh3918UW2Jcdyrmbg7E7HtqpUpSqVSqWSdPHLj/EIPBuOa9rWl51K+WgHGNbAHprW45edpqYc
fPp0+vmgsvNL7cPFb1eNFoDlLffLztN0Ojk/PHx5eSl3Zo4hDx+N8sAeH6Iyh2fl0x1S8Hwwc6f2'    
...
Run Code Online (Sandbox Code Playgroud)

图像的内容看起来像(这最终是我希望它看起来像)

0x6170706C69636174696F6E
Run Code Online (Sandbox Code Playgroud)

如果我选择convert(varbinary(MAX), @contentAsString)我得到0x6100700070006C00690063006100740069006F006E

似乎转换是在目标上但在每个之间放置两个零(00),我将其称为缺少更好的单词的字节.

我已尝试在论坛上发布各种更复杂的方法,但无济于事.任何帮助,将不胜感激.

Woo*_*Moo 26

来自MSDN

在SQL Server 2008中,由于我们直接在CONVERT内置函数中添加了支持,因此这些转换更加容易.下面的代码示例显示了如何执行转换:

declare @hexstring varchar(max);

set @hexstring = '0xabcedf012439';

select CONVERT(varbinary(max), @hexstring, 1);

set @hexstring = 'abcedf012439';

select CONVERT(varbinary(max), @hexstring, 2);

go

declare @hexbin varbinary(max);

set @hexbin = 0xabcedf012439;

select
   CONVERT(varchar(max), @hexbin, 1),
   CONVERT(varchar(max), @hexbin, 2);

go
Run Code Online (Sandbox Code Playgroud)


Mat*_*eir 5

好的,所以填充的 00 已被回答。

DECLARE @hexStringNVar nvarchar(max)
DECLARE @hexStringVAR varchar(max)

SET @hexStringNVar = '{my hex string as described above}'
SET @hexStringVAR = '{my hex string as described above}'

select CONVERT(varbinary(MAX), @hexStringNVar)) = 0x6100700070006C00690063...
select CONVERT(varbinary(MAX), @hexStringVAR)) = 0x6170706C6963...
Run Code Online (Sandbox Code Playgroud)

00填充是因为Unicode或NVARCHAR而不是VARCHAR

因此,由于存储的数据在 中nvarchar(max),解决方案是这样的:

select CAST(cast(@hexStringNVar as varchar(max)) as varbinary(max)) = 0x6170706C6963...
Run Code Online (Sandbox Code Playgroud)

我确信这convert也能正常工作,但我的目标 SQL Server 是 2005。