Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

menambahkan informasi pengkodean ke hasil FOR XML

Seperti yang ditunjukkan @gbn di jawaban lain dan pada pertanyaan lain , "data XML disimpan secara internal sebagai ucs- 2 ", dan SQL Server tidak menyertakannya saat menghasilkan data. Namun, Anda dapat mengonversi XML menjadi string dan menambahkan deklarasi XML di awal secara manual. Namun, hanya menggunakan UTF-8 dalam deklarasi akan menjadi tidak akurat. String Unicode yang dihasilkan SQL ada di UCS-2. Misalnya, ini akan gagal:

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

dengan kesalahan:

Ini, di sisi lain, akan berfungsi seperti yang diharapkan:

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

Berikut adalah kode yang akan menghasilkan string XML penuh deklarasi yang Anda cari untuk data contoh Anda:

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 Server:PILIH hanya baris dengan MAX(DATE)

  2. Bagaimana cara menginstal freetds di Linux?

  3. Apa perbedaan antara Float dan Numerik/Desimal di SQL Server - Tutorial SQL Server / T-SQL Bagian 33

  4. Pemicu SQL Server:Pemahaman dan Alternatif

  5. Apa perbedaan antara indeks berkerumun dan tidak berkerumun?