4
我想知道,如何將XML內容從任意文件加載到本地變量中?T-SQL,將XML數據加載到本地變量
這適用於一個固定的文件:
DECLARE @xml XML
SET @xml =
(
SELECT *
FROM OPENROWSET(BULK 'C:\data.xml', SINGLE_BLOB) AS data
)
不過,我想從任意文件中加載數據。
這不起作用(如BULK似乎只支持字符串參數)
DECLARE @file NVARCHAR(MAX) = 'C:\data.xml'
DECLARE @xml XML
SET @xml =
(
SELECT *
FROM OPENROWSET(BULK @file, SINGLE_BLOB) AS data
)
我也試過以下(沒有成功,因爲局部變量(@xml)似乎是超出範圍當執行EXEC時):
DECLARE @file NVARCHAR(MAX) = 'C:\data.xml'
DECLARE @xml XML
DECLARE @bulk NVARCHAR(MAX) = 'SET @xml = (SELECT * FROM OPENROWSET(BULK ''' + @file + ''', SINGLE_BLOB) AS data)'
EXEC (@bulk)
我猜我需要使用臨時表,但是如何?
正是憑藉這種解決的問題。 – sammybar
這是一個解決方案的問題。如果xml文件是utf-8編碼並且包含國際字符(如Ó),並且xml文件不是以prolog <?xml version =「1.0」encoding =「UTF-8」?>開頭的,在這種情況下,sql server 2005錯誤地解釋了文件編碼,並且將其解釋爲「Ã」。根據這種情況下的標準,默認情況下,xml應該被認爲是utf-8編碼,但是sql 2005無法做到這一點。 – sammybar
我發現解決方案:使用SINGLE_BLOB而不是SINGLE_CLOB。微軟表示:「我們建議您僅使用SINGLE_BLOB選項而不是SINGLE_CLOB和SINGLE_NCLOB導入XML數據,因爲只有SINGLE_BLOB支持所有Windows編碼轉換。」在http://msdn.microsoft.com/en-us/library/ms190312.aspx – sammybar