我必须将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忽略命名空间,或者为整个表添加一次包含这些项的列的命名空间?
答案 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;