Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

добавяне на информация за кодиране към резултата от FOR XML

Както посочва @gbn в друг отговор и на друг въпрос , "XML данните се съхраняват вътрешно като ucs- 2 ", а SQL Server не го включва, когато създава данните. Можете обаче да конвертирате XML в низ и да добавите XML декларацията в началото ръчно. Обаче простото използване на UTF-8 в декларацията би било неточно. Unicode низът, който 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. Как можем да използваме ISNULL за всички имена на колони в SQL Server 2008?

  2. как да напиша SQL заявка за този резултат?

  3. Как да получа последно въведен идентификатор?

  4. Изпълнение на COUNT SQL функция

  5. Как да разделя (разделя) низ със запетая в съхранена процедура на SQL Server