2011-10-27 87 views
3

我必須將XML內容存儲在SQL Server 2008R2數據庫中。 XML不是一個完整的文件,但只包含簡單的元素。在SQL數據庫中存儲xml

我創建了一個類型爲[xml]的列的表格,但是當我嘗試存儲一個項目時出現錯誤。

例如,如果我嘗試存儲這個(簡體)項:

<AX_Wald gml:id="DESHPDHK0000u2xK"> 
    <gml:identifier codeSpace="http://www.adv-online.de/">urn:adv:oid:DESHPDHK0000u2xK</gml:identifier> 
    <vegetationsmerkmal>1300</vegetationsmerkmal> 
</AX_Wald> 

我的錯誤(翻譯):

Msg 9459 - XML parsing: line 1, character 35, undeclared prefix. 

我想這是命名空間失蹤,但我不希望將所有可能的命名空間添加到數據庫中的每個項目。有沒有辦法解決這個問題,而不改變XML?我需要能夠稍後訪問和比較原始XML,所以如果可能的話,我寧願保持不變。

那麼有沒有辦法告訴SQL Server要麼告訴SQL Server忽略命名空間,要麼爲整個表包含這些項目的列添加名稱空間?

回答

1

你可以簡單地認爲這些XML代碼段作爲結構化文本,並將它們存儲爲nvarchar而不是XML類型。

你也可以指定你的XML type as a fragment這應該是你的方案中更多的寬容和靈活:

一個XML片段是缺少一個頂級 元素的XML實例。

+2

即使是一個片段也需要定義名稱空間。一個片段只允許你有多個「根」元素。他們仍然需要良好的形成。 – Yuck

+0

我只使用nvarchar(max)而不是xml(文本類型被棄用)。感謝提示! – Sam

0

問題是您的gml前綴。您需要執行以下操作:

<AX_Wald xmlns:gml="http://someUri/" gml:id="DESHPDHK0000u2xK"> 

否則,您沒有有效的XML文檔。您可以驗證SQL Server會接受這個快速測試文檔:除非您要使用/需要在SQL Server中的XML功能(如執行XML查詢)

DECLARE @X XML = 
    N'<AX_Wald xmlns:gml="http://someUri/" gml:id="DESHPDHK0000u2xK" />'; 

SELECT @X;