2011-06-07 19 views
7

Tengo una tabla de SQL Server 2008 R2 con el campo nvarchar(4000).Cómo decodificar nvarchar en texto (SQL Server 2008 R2)?

de datos que almacena esta tabla se parece a

'696D616765206D61726B65643A5472'

o

'303131' ("011").

Veo que cada carácter está codificando a hexadecimal.

¿Cómo puedo leer esos datos de la tabla? No quiero la función de decodificación de escritura, quiero decir que existe una forma más simple.

P.S. Lo siento por mi ingles.

Respuesta

4

SQL Server 2008 en realidad tiene un built-in hex-codificación y decodificación de función!

Muestra (nótese el tercer parámetro con el valor "1" al convertir la cadena a 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

La ventaja de este enfoque es que usted no necesita el Llamada "Exec", que generalmente intenta evitar, por temor a la inyección, entre otras cosas. La desventaja es que solo funciona en SQL Server 2008 y posterior.

2

necesitará una función de decodificación creo, el más simple:

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

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

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

declarar @fld nvarchar (4000) conjunto @fld = '696D616765206D61726B65643A5472' exec ('select convert (varchar (max), 0x' + @fld + ')') Creo que esto será más precisa – Pankaj

+0

Verdadero , aunque para qué vale 'declare @v type = value' se admite en sql 2k8 –

+0

Sí, pido disculpas por esto. – Pankaj

Cuestiones relacionadas