我有一个带有nvarchar(4000)
字段的 SQL Server 2008 R2 表。
存储此表的数据如下所示
'696D616765206D61726B65643A5472'
或者
'303131' ("011")
.
我看到每个字符都编码为十六进制。
如何从表中读取这些数据?我不想写解码功能,我的意思是存在更简单的方法。
PS对不起我的英语。
我有一个带有nvarchar(4000)
字段的 SQL Server 2008 R2 表。
存储此表的数据如下所示
'696D616765206D61726B65643A5472'
或者
'303131' ("011")
.
我看到每个字符都编码为十六进制。
如何从表中读取这些数据?我不想写解码功能,我的意思是存在更简单的方法。
PS对不起我的英语。
SQL Server 2008 实际上有一个内置的十六进制编码和解码功能!
示例(将字符串转换为 VarBinary 时,注意第三个参数的值为“1”):
DECLARE @ProblemString VarChar(4000) = '54657374'
SELECT Convert(VarChar, Convert(VarBinary, '0x' + @ProblemString, 1))
这种方法的优点是您不需要“Exec”调用,您通常会尽量避免这种调用,因为害怕注入等等。缺点是它只适用于 SQL Server 2008 及更高版本。
我认为您将需要一个最简单的解码功能:
declare @fld nvarchar(4000) = '696D616765206D61726B65643A5472'
exec('SELECT CONVERT(varchar(max),0x' + @fld + ')')
---------------
image marked:Tr