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内置函数中添加了支持,因此这些转换更加容易.下面的代码示例显示了如何执行转换:
Run Code Online (Sandbox Code Playgroud)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
好的,所以填充的 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。