小编典典

SQL Server字符串到varbinary的转换

sql

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

内容为字符串(从bytearray到字符串)看起来像这样…

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

图像的内容看起来像(这最终就是我想要的样子)

0x6170706C69636174696F6E

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

看起来转换似乎已达到目标,但在每个之间放置了两个零(00),由于缺少更好的字词,我将其称为一个字节。

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


阅读 234

收藏
2021-03-23

共1个答案

小编典典

好的,所以已填充的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...

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

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

select CAST(cast(@hexStringNVar as varchar(max)) as varbinary(max)) = 0x6170706C6963...

我敢肯定,它convert也能正常工作,但我的目标SQL Server是2005。

2021-03-23