2013-01-03 99 views
0

好的,問題是有一個合併或連接需要在2個表上完成。一個將文件內容存儲爲[image]類型或varbinary(最大),另一個將文件內容存儲爲十六進制字符串。如果我上傳同樣的內容到這兩個表SQL Server十六進制字符串到varbinary轉換

內容爲字符串(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

看起來好像轉換在T但在每個之間放置兩個零(00),我會稱它爲缺少更好單詞的字節。

我已經嘗試了各種論壇上發佈的更復雜的方法,但無濟於事。 任何幫助,將不勝感激。

+0

在你例如另一個表包含base64編碼,而不是十六進制字符串。這個例子是你打算作爲輸出接收還是實際的源格式? –

回答

4

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

+0

或將存儲類型更改爲'varchar'而不是'nvarchar' – GoldBishop

14

MSDN

在SQL Server 2008中,將這些轉換更容易,因爲我們 直接在CONVERT內置功能增加了支持。代碼 下面示例說明如何執行轉換(S):

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 
+0

的@hexstring看起來像這樣: ' '應用/ vnd.xfdl;內容編碼= 「的base64 gzip的」 H4sIAAAAAAAAC + y9e1fjONI4/H9/Cg173idwFgIJl + 5m6MzPJAayE + KsnXQPs8 + cHJMY8HZi57ET' ...' 目標二值=' 0x670706C69636174696F6E' 'select CONVERT(varbinary(max),@hexstring);' - 成功,但錯誤的二進制0x6100700070006C00690063006100740069006F006E 'select CONVERT(varbinary(max),@hexstring,1);' - failed「將數據類型nvarchar varbinary「 'select CONVERT(varbinary(max),@hexstring,2);' - 失敗」將數據類型nvarchar轉換爲varbinary時出錯「 –

+0

我測試了幾乎所有我可以在線找到的東西,例如」From MSDN「type posts。剩下的問題是,爲什麼泛型CONVERT(varbinary(MAX),@hexstring)每2個字符填充00,並且有辦法擺脫它? –

相關問題