2011-06-07 60 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