2017-02-13 54 views
1

我想用UTF-8編碼生成XML。但是默認情況下它是在UCS-2中生成的。使用SQL Server生成編碼UTF-8的XML

請幫我用UTF-8編碼生成XML。下面是我的查詢:

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') 

當我使用存儲過程msdb.dbo.sp_send_dbmail,當它在記事本中打開郵件發送此XML作爲附件++話,就說明UCS-2

+0

SQL Server(不包括2016版)不支持** UTF-8 ... –

回答

0

根據MSDN documentation,這是對MS SQL Server上的XML數據類型的限制。 SQL Server總是保存一個XML數據類型,其字符編碼爲UCS-2

例如,在XML數據類型實例中存儲XML數據時,不會保留XML聲明PI。這是設計。數據轉換爲xml類型後,XML聲明()及其屬性(版本/編碼/獨立)將丟失。 XML聲明被視爲XML解析器的指令。 XML數據在內部存儲爲ucs-2。 XML實例中的所有其他PI都被保留。

考慮到上述情況,您可以手動添加此功能以生效。 在試圖做到這一點,你可以使用下面的方法獲得的FOR XML

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

優勢,您可以檢查this的答案與此類似的討論。

希望這會有所幫助!