2017-02-13 1 views
1

Ich möchte ein XML in UTF-8-Codierung generieren. Aber standardmäßig wird in UCS-2 generiert.XML in UTF-8-Codierung mit SQL Server generieren

Bitte helfen Sie mir, XML in UTF-8-Codierung zu generieren. Im Folgenden finden Sie meine Frage:

select 
    isnull(cast('5678' as nvarchar(50)),'') [Vlootnummer], 
    isnull((select top 1 cast(EngineNo as nvarchar(50)) 
      from VTS_DEMO.dbo.VehicleDetails v 
      join VTS_DEMO.dbo.VehicleDevice vd on v.VehicleId = vd.VehicleId 
               and ObuID = '353234023894171'), '') as Kenteken, 
    isnull((select top 1 cast(FillingStationName as nvarchar(50)) Units 
      from VTS_DEMO.dbo.FillingStation 
      where GeoFenceId = 3655),'') Locatie, 
    isnull((select top 1 GeofenceCode 
      from VTS_DEMO.dbo.GeoFence 
      where GeoFenceId = 3655), '') GeoFencingID, 
    isnull(cast(case when 1 = 0 then '' else '2017-02-07T23:15:25Z' end as nvarchar(50)),'') Aankomsttijd, 
    isnull(cast(case when 1 = 0 then '2017-02-07T23:15:25Z' else NULL end as nvarchar(50)),'') Vertrektijd 
FOR XML PATH('Notificatie') 

Wenn ich msdb.dbo.sp_send_dbmail diese XML als Anhang in E-Mail unter Verwendung der gespeicherten Prozedur senden, wenn seine in Notepad geöffnet ++ dann zeigt es UCS-2.

+0

SQL Server (bis einschließlich Version 2016) ** unterstützt nicht ** UTF-8 ... –

Antwort

0

Gemäß der MSDN documentation ist es eine Beschränkung auf den XML-Datentyp auf MS SQL Server. SQL Server speichert immer einen XML-Datentyp mit der Zeichencodierung von UCS-2.

Die XML-Deklaration PI zum Beispiel wird beim Speichern von XML-Daten in einer XML-Datentypinstanz nicht beibehalten. Das ist Absicht. Die XML-Deklaration() und ihre Attribute (Version/Codierung/Standalone) gehen verloren, nachdem Daten in den Typ XML konvertiert wurden. Die XML-Deklaration wird als Direktive für den XML-Parser behandelt. Die XML-Daten werden intern als ucs-2 gespeichert. Alle anderen PIs in der XML-Instanz bleiben erhalten.

In Anbetracht der oben genannten, können Sie dies manuell hinzufügen, um wirksam zu werden. In einem Versuch, dies zu tun, können Sie die Vorteile erlangen folgende Verwendung von FOR XML

SELECT CAST((SELECT [Columns] FROM [Tables] FOR XML AUTO) AS VARCHAR(MAX)) AS xmldata 

Sie this Antwort für eine Diskussion ähnlich wie diese überprüfen können.

Hoffe, das hilft!