在SQL数据库中存储xml

时间:2011-10-27 14:22:22

标签: sql-server xml

我必须将XML内容存储在SQL Server 2008R2数据库中。 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忽略命名空间,或者为整个表添加一次包含这些项的列的命名空间?

2 个答案:

答案 0 :(得分:1)

除非您在SQL Server中使用/需要XML功能(例如执行XML查询),否则您可以将这些XML片段视为结构化文本,并将它们存储为nvarchar而不是XML类型。

您还可以在您的计划中指定您应该更加宽容和灵活的XML type as a fragment

  

XML片段是缺少单个顶级的XML实例   元件。

答案 1 :(得分:0)

问题是您的gml前缀。您需要执行以下操作:

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

否则您没有有效的XML文档。您可以使用此快速测试验证SQL Server是否接受该文档:

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

SELECT @X;