Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर:अमान्य XML वर्णों को VARCHAR(MAX) फ़ील्ड से बदलें

VARBINARY . के निहित रूपांतरण का उपयोग करके एक तरकीब है बेस 64 और पीछे:

यहां आपकी बुराई की सूची

DECLARE @evilChars VARCHAR(MAX)=
  CHAR(0x0)
+ CHAR(0x1)
+ CHAR(0x2)
+ CHAR(0x3)
+ CHAR(0x4)
+ CHAR(0x5)
+ CHAR(0x6)
+ CHAR(0x7)
+ CHAR(0x8)
+ CHAR(0x9)
+ CHAR(0xa)
+ CHAR(0xb)
+ CHAR(0xc)
+ CHAR(0xd)
+ CHAR(0xe)
+ CHAR(0xf)
+ CHAR(0x10)
+ CHAR(0x11)
+ CHAR(0x12)
+ CHAR(0x13)
+ CHAR(0x14)
+ CHAR(0x15)
+ CHAR(0x16)
+ CHAR(0x17)
+ CHAR(0x18)
+ CHAR(0x19)
+ CHAR(0x1a)
+ CHAR(0x1b)
+ CHAR(0x1c)
+ CHAR(0x1d)
+ CHAR(0x1e)
+ CHAR(0x1f)
+ CHAR(0x7f);

यह काम करता है

DECLARE @XmlAsString NVARCHAR(MAX)=
(
    SELECT @evilChars FOR XML PATH('test')
);
SELECT @XmlAsString;

परिणाम (कुछ "मुद्रित" हैं)

<test>&#x00;&#x01;&#x02;&#x03;&#x04;&#x05;&#x06;&#x07;&#x08;    
&#x0B;&#x0C;&#x0D;&#x0E;&#x0F;&#x10;&#x11;&#x12;&#x13;&#x14;&#x15;&#x16;&#x17;&#x18;&#x19;&#x1A;&#x1B;&#x1C;&#x1D;&#x1E;&#x1F;</test>

निम्नलिखित वर्जित है

SELECT CAST(@XmlAsString AS XML)

लेकिन आप VARBINARY के आधार 64 में निहित रूपांतरण का उपयोग कर सकते हैं

DECLARE @base64 NVARCHAR(MAX)=
(
    SELECT CAST(@evilChars AS VARBINARY(MAX)) FOR XML PATH('test')
);
SELECT @base64;

परिणाम

<test>AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh9/</test>

अब आपको अपना असली XML मिल गया है जिसमें विशेष वर्ण शामिल हैं !

SELECT CAST(CAST(@base64 AS XML).value('/test[1]','varbinary(max)') AS VARCHAR(MAX)) FOR XML PATH('reconverted')

परिणाम

<reconverted>&#x0;&#x1;&#x2;&#x3;&#x4;&#x5;&#x6;&#x7;&#x8;  
&#xB;&#xC;
&#xE;&#xF;&#x10;&#x11;&#x12;&#x13;&#x14;&#x15;&#x16;&#x17;&#x18;&#x19;&#x1A;&#x1B;&#x1C;&#x1D;&#x1E;&#x1F;</reconverted>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एसक्यूएल सर्वर में डबल का प्रतिनिधित्व क्या करता है?

  2. SQL Server Cursor Types - LOCAL और GLOBAL Cursor में क्या अंतर है | SQL सर्वर ट्यूटोरियल / TSQL ट्यूटोरियल

  3. तालिका को छोटा नहीं किया जा सकता क्योंकि इसे एक विदेशी कुंजी बाधा द्वारा संदर्भित किया जा रहा है - SQL सर्वर / TSQL ट्यूटोरियल भाग 70

  4. तालिका में मूल्यों की लगातार घटनाओं की संख्या की गणना करें

  5. मैं MS SQL सर्वर प्रबंधन स्टूडियो का उपयोग किए बिना SQL सर्वर में अपना डिफ़ॉल्ट डेटाबेस कैसे बदल सकता हूँ?