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

FOR XML के परिणाम में एन्कोडिंग जानकारी जोड़ना

जैसा कि @gbn एक अन्य उत्तर में बताता है और एक अन्य प्रश्न पर , "XML डेटा आंतरिक रूप से ucs के रूप में संग्रहीत किया जाता है- 2 ", और SQL सर्वर डेटा का उत्पादन करते समय इसे शामिल नहीं करता है। हालाँकि, आप XML को एक स्ट्रिंग में बदल सकते हैं और शुरुआत में मैन्युअल रूप से XML घोषणा को जोड़ सकते हैं। हालाँकि, केवल घोषणा में UTF-8 का उपयोग करना गलत होगा। यूनिकोड स्ट्रिंग जो SQL उत्पन्न करता है वह UCS-2 में है। उदाहरण के लिए, यह विफल हो जाएगा:

SELECT CONVERT(xml,N'<?xml version="1.0" encoding="UTF-8"?>' + CONVERT(NVARCHAR(MAX),CONVERT(XML,N'<x>' + NCHAR(10176) + N'</x>')));

त्रुटि के साथ:

दूसरी ओर, यह अपेक्षा के अनुरूप काम करेगा:

SELECT CONVERT(xml,N'<?xml version="1.0" encoding="UCS-2"?>' + CONVERT(NVARCHAR(MAX),CONVERT(XML,N'<x>' + NCHAR(10176) + N'</x>')));

यहां कोड है जो आपके उदाहरण डेटा के लिए खोजी जाने वाली पूर्ण, घोषणा-युक्त XML स्ट्रिंग का उत्पादन करेगा:

DECLARE @Agents TABLE
(
    AgentID int,
    AgentName nvarchar(50),
    AgentLocation nvarchar(100)
);
INSERT INTO @Agents (AgentID, AgentName, AgentLocation) VALUES (1, N'Mike', N'Sanfrancisco');
INSERT INTO @Agents (AgentID, AgentName, AgentLocation) VALUES (2, N'John', N'NY');

WITH BaseData AS
(
    SELECT
        (
            SELECT
                AgentID AS '@id',
                AgentName AS 'Name',
                AgentLocation AS 'Location'
            FROM    @Agents
            FOR     XML PATH('Agent'), ROOT('Agents'), TYPE
        ) AS AgentXML
), FullStringTable AS
(
    SELECT
        *,
        '<?xml version="1.0" encoding="UCS-2"?>' +
        CONVERT(nvarchar(max),AgentXML) AS FullString
    FROM        BaseData
)
SELECT
    AgentXML AS OriginalXML,
    FullString,
    CONVERT(xml,FullString) AS FullStringConvertedToXML
FROM        FullStringTable;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सात SQL सर्वर प्रकार के आंतरिक भाग - भाग 2

  2. मैं SQL सर्वर में एक विदेशी कुंजी कैसे छोड़ूं?

  3. Sql LEFT OUTER JOIN WHERE क्लॉज के साथ

  4. SSRS 2014 रिपोर्ट परिनियोजित समस्या

  5. वर्चर (अधिकतम) में कितने वर्ण हैं?