Как декодировать nvarchar в текст (SQL Server 2008 R2)? - PullRequest
7 голосов
/ 07 июня 2011

У меня есть таблица SQL Server 2008 R2 с полем nvarchar(4000).

Данные, в которых хранится эта таблица, выглядят как

'696D616765206D61726B65643A5472'

или

'303131' ("011").

Я вижу, что каждый символ кодируется в шестнадцатеричный код.

Как я могу прочитать эти данные из таблицы? Я не хочу писать функцию декодирования, я имею в виду, что существует более простой способ.

P.S. Извините за мой английский.

Ответы [ 2 ]

4 голосов
/ 07 июня 2011

SQL Server 2008 фактически имеет встроенную функцию шестнадцатеричного кодирования и декодирования!

Пример (обратите внимание на третий параметр со значением «1» при преобразовании вашей строки в VarBinary):

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

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

Преимущество этого подхода состоит в том, что вам не нужен вызов "Exec", который вы обычно стараетесь избегать, опасаясь инъекций среди прочего.Недостатком является то, что он работает только в SQL Server 2008 и более поздних версиях.

2 голосов
/ 07 июня 2011

Вам понадобится функция декодирования, я думаю, самая простая:

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

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

---------------
image marked:Tr
...