Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

dodawanie informacji o kodowaniu do wyniku FOR XML

Jak wskazuje @gbn w innej odpowiedzi i na inne pytanie , „dane XML są przechowywane wewnętrznie jako ucs- 2 ", a SQL Server nie uwzględnia go podczas tworzenia danych. Można jednak przekonwertować XML na ciąg i ręcznie dołączyć deklarację XML na początku. Jednak samo użycie UTF-8 w deklaracji byłoby niedokładne. Ciąg Unicode, który generuje SQL, jest w UCS-2. Na przykład to się nie powiedzie:

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

z błędem:

To z drugiej strony będzie działać zgodnie z oczekiwaniami:

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

Oto kod, który wygeneruje pełny, obciążony deklaracjami ciąg XML, którego szukasz dla przykładowych danych:

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. Jak znaleźć bieganie mnożenia

  2. Podsłuchiwanie parametrów (lub fałszowanie) w SQL Server

  3. Jak lepiej zduplikować zestaw danych w SQL Server

  4. Wydajne zamienniki ISNUMERIC() w SQL Server?

  5. zautomatyzować zapytanie SQL uruchamiane co miesiąc