好的,问题是需要在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
convert(varbinary(MAX), @contentAsString)
0x6100700070006C00690063006100740069006F006E
看起来转换似乎已达到目标,但在每个之间放置了两个零(00),由于缺少更好的字词,我将其称为一个字节。
我尝试过在论坛上发布的各种更复杂的方法,但都无济于事。任何帮助,将不胜感激。
好的,所以已填充的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。
00
NVARCHAR
VARCHAR
因此,由于存储的数据位于中nvarchar(max),解决方案是这样的:
nvarchar(max)
select CAST(cast(@hexStringNVar as varchar(max)) as varbinary(max)) = 0x6170706C6963...
我敢肯定,它convert也能正常工作,但我的目标SQL Server是2005。
convert