sql >> Database >  >> RDS >> Sqlserver

het toevoegen van coderingsinformatie aan het resultaat van FOR XML

Zoals @gbn aangeeft in een ander antwoord en op een andere vraag , "de XML-gegevens worden intern opgeslagen als ucs- 2 ", en SQL Server neemt het niet op bij het produceren van de gegevens. U kunt de XML echter converteren naar een tekenreeks en de XML-declaratie aan het begin handmatig toevoegen. Het zou echter onnauwkeurig zijn om UTF-8 in de declaratie te gebruiken. Unicode-tekenreeks die SQL produceert, bevindt zich in UCS-2. Dit zal bijvoorbeeld mislukken:

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

met fout:

Dit, aan de andere kant, zal werken zoals verwacht:

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

Hier is de code die de volledige, met aangifte beladen XML-string zal produceren die u zoekt voor uw voorbeeldgegevens:

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. Hoe Atanh() werkt in PostgreSQL

  2. Veel Query End-statussen in MySQL, alle verbindingen binnen enkele minuten gebruikt

  3. Hoe een tabel met beperkte externe sleutels af te kappen?

  4. Welke versie van MySQL is compatibel met Airflow versie 1.10?