2011-06-07 23 views
7

मेरे पास nvarchar(4000) फ़ील्ड के साथ एक SQL Server 2008 R2 तालिका है।टेक्स्ट में nvarchar को डीकोड कैसे करें (SQL Server 2008 R2)?

डाटा कि इस तालिका को संग्रहीत करता है की तरह

'696D616765206D61726B65643A5472'

या

'303131' ("011") देखो।

मुझे लगता है कि प्रत्येक चार हेक्स पर एन्कोडिंग कर रहा है।

मैं तालिका से उन डेटा को कैसे पढ़ सकता हूं? मैं डिकोडिंग फ़ंक्शन लिखना नहीं चाहता, मेरा मतलब है कि सरल तरीका मौजूद है।

पीएस मेरी अंग्रेजी के लिए खेद है।

उत्तर

4

एसक्यूएल सर्वर 2008 वास्तव में एक अंतर्निहित में हेक्स-एन्कोडिंग और डिकोडिंग सुविधा!

नमूना (ध्यान दें साथ मूल्य "1" जब VARBINARY करने के लिए अपने स्ट्रिंग परिवर्तित तीसरे पैरामीटर):

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

इस दृष्टिकोण का लाभ यह है कि आप की जरूरत नहीं है कि अन्य चीजों के साथ इंजेक्शन के डर के लिए, "एक्सेक" कॉल, जिसे आप आम तौर पर टालने का प्रयास करते हैं। नुकसान यह है कि यह केवल SQL Server 2008 और बाद में काम करता है।

2

आप एक डिकोडिंग समारोह मुझे लगता है, सबसे सरल की आवश्यकता होगी:

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

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

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

घोषित @fld nvarchar (4000) सेट @fld = '696D616765206D61726B65643A5472' कार्यकारी ('का चयन करें CONVERT (varchar (max), 0x' + @fld + ')') मुझे लगता है कि यह और अधिक सटीक – Pankaj

+0

सच हो जाएगा , यद्यपि इसके मूल्य के लिए '[email protected] type = value' की घोषणा एसक्यूएल 2k8 –

+0

में समर्थित है हां, मैं इसके लिए क्षमा चाहता हूं। – Pankaj

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^