2017-03-18 220 views
0

使用OPENROWSET將xml文件的內容寫入nvarchar(MAX)列時,最終出現亂碼的前導字符。SQL Server OPENROWSET(BULK'C: Temp Test.xml',SINGLE_CLOB)返回亂碼前導字符

即使在沒有插入的情況下執行select,結果也是一樣的。

SELECT Xml.BulkColumn 
FROM OPENROWSET(BULK 'C:\Temp\Test.xml', SINGLE_CLOB) Xml 

結果:

enter image description here

我已經試驗了各種CODEPAGE選項,但得到相同的結果。

SELECT Xml.BulkColumn 
FROM OPENROWSET(BULK 'C:\Temp\Test.xml', CODEPAGE='RAW', SINGLE_CLOB) Xml 

在記事本文件看起來很好。

enter image description here

回答

1

的解決方案是在XML文件的編碼從UTF-8改變爲Unicode,然後使用SINGLE_NCLOB代替SINGLE_CLOB。

SELECT Xml.BulkColumn 
FROM OPENROWSET(BULK 'C:\Temp\Test2.xml', SINGLE_NCLOB) Xml 

enter image description here

+0

SQL Server之前,2016年的版本並沒有真正支持UTF-8 –

+0

從微軟文檔:'重要 我們建議您導入XML數據只能用SINGLE_BLOB選項,而不是SINGLE_CLOB和SINGLE_NCLOB ,因爲只有SINGLE_BLOB支持所有Windows編碼轉換。「# 來源:https://docs.microsoft.com/en-us/sql/t-sql/functions/openrowset-transact-sql – Petaflop