2011-06-07 19 views
7

nvarchar(4000) alanına sahip bir SQL Server 2008 R2 tablosum var. Bu tabloyu saklarNvarchar'ı metne nasıl çözülür (SQL Server 2008 R2)?

Veri

'696D616765206D61726B65643A5472'

veya

'303131' ("011")

benziyor.

Her char'ın hex'i kodladığını görüyorum.

Bu verileri tablodan nasıl okuyabilirim? Kod çözme fonksiyonu yazmak istemiyorum, yani daha basit bir yol var.

P.S. İngilizcem için üzgünüm.

cevap

4

SQL Server 2008 aslında sahip dahili bir altıgen-kodlama ve kod çözme özelliği!

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

Bu yaklaşımın avantajı olduğunu size gerekmez

Numune (VARBINARY için dize dönüştürürken değeri "1" ile üçüncü parametreyi unutmayın) Başka şeylerin yanı sıra enjeksiyon korkusu için genellikle kaçınmaya çalıştığınız "Exec" çağrısı. Dezavantajı, yalnızca SQL Server 2008 ve sonraki sürümlerde çalışmasıdır.

2

Sen bence bir kod çözme işlevini, en basit gerekir:

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

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

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

beyan @fld nvarchar (4000) seti @fld = '696D616765206D61726B65643A5472' exec ('CONVERT (varchar (max SEÇ), 0x' + @fld + ')') bu daha kesin – Pankaj

+0

Doğru olacağını düşünüyorum her ne kadar değeri "declare @v type = value" için sql 2k8 –

+0

destekleniyorsa da, bunun için özür dilerim. – Pankaj