7

我有一个带有nvarchar(4000)字段的 SQL Server 2008 R2 表。

存储此表的数据如下所示

'696D616765206D61726B65643A5472'

或者

'303131' ("011").

我看到每个字符都编码为十六进制。

如何从表中读取这些数据?我不想写解码功能,我的意思是存在更简单的方法。

PS对不起我的英语。

4

2 回答 2

4

SQL Server 2008 实际上有一个内置的十六进制编码和解码功能!

示例(将字符串转换为 VarBinary 时,注意第三个参数的值为“1”):

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

这种方法的优点是您不需要“Exec”调用,您通常会尽量避免这种调用,因为害怕注入等等。缺点是它只适用于 SQL Server 2008 及更高版本。

于 2011-06-07T12:36:56.153 回答
2

我认为您将需要一个最简单的解码功能:

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

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

---------------
image marked:Tr
于 2011-06-07T10:09:42.933 回答