2011-06-07 58 views
7

我有一個與nvarchar(4000)字段的SQL Server 2008 R2表。如何將nvarchar解碼爲文本(SQL Server 2008 R2)?

存儲此表

數據看起來像

'696D616765206D61726B65643A5472'

'303131' ("011")

我看到每個字符都編碼爲十六進制。

如何從表中讀取這些數據?我不想寫解碼功能,我的意思是存在更簡單的方法。

P.S.對不起我的英語不好。

回答

4

SQL Server 2008中實際上有一個內置的十六進制編碼和解碼功能!

樣品(注意與值「1」轉換您的字符串VARBINARY當第三個參數):

DECLARE @ProblemString VarChar(4000) = '54657374' 
SELECT Convert(VarChar, Convert(VarBinary, '0x' + @ProblemString, 1)) 

編號:http://blogs.msdn.com/b/sqltips/archive/2008/07/02/converting-from-hex-string-to-varbinary-and-vice-versa.aspx

這種方法的優點是你不需要「執行」電話,你通常試圖避免,因爲擔心注射等。缺點是它僅適用於SQL Server 2008及更高版本。

2

您將需要一個解碼功能,我認爲,最簡單的:

declare @fld nvarchar(4000) = '696D616765206D61726B65643A5472' 

exec('SELECT CONVERT(varchar(max),0x' + @fld + ')') 

--------------- 
image marked:Tr 
+0

申報@fld爲nvarchar(4000) 組@fld = '696D616765206D61726B65643A5472' EXEC( '選擇轉換(VARCHAR(最大),0X' + @fld + ')')我認爲這將是更精確的 – Pankaj 2011-06-07 10:20:03

+0

真,雖然在sql 2k8 – 2011-06-07 10:33:08

+0

中支持'declare @v type = value'是值得的,我爲此道歉。 – Pankaj 2011-06-07 10:42:32