2

在创建具有 XML 类型列的表时,我指的是复杂的XML Schema Collection。当我指定XML Schema时,我可以选择提及CONTENTDOCUMENT关键字。后者将确保 XML 数据作为文档存储在单个列中。

根据视频教程,CONTENT将 XML 数据存储在片段中。

除了上述声明之外,我在其他任何地方都找不到关于CONTENT关键字的使用以及它对模式和数据的影响的参考。

我想知道片段是如何创建和管理的,是否以及如何单独查询它们。此外,片段是如何相关的。接下来,当我修改 XML Schema Collection 时,会有什么影响。

4

1 回答 1

2

实际上我认为SQLServer 2005 XML的文档非常好。
CONTENT 是默认值,允许任何有效的 XML。DOCUMENT 更具体,意味着您可以存储的 XML 数据只允许有一个顶级节点。

创造:

CREATE TABLE XmlCatalog ( 
   ID INT PRIMARY KEY, 
   Document XML(CONTENT myCollection))

插入:

INSERT INTO XmlCatalog VALUES (2, 
'<doc id="123">
    <sections>
   <section num="1"><title>XML Schema</title></section>
   <section num="3"><title>Benefits</title></section>
   <section num="4"><title>Features</title></section>
    </sections>
</doc>')

选择:

SELECT xCol.query('/doc[@id = 123]//section')   
FROM XmlCatalog   
WHERE  xCol.exist ('/doc[@id = 123]') = 1

...等等。查询语言或多或少超出了 xpath 1.0 的一个子集。

如果您修改 XSD,则会在 Inserts 和 Updates 上对其进行检查,并将其存储在每个元素的 xml 中。据我了解文档还允许为一列添加多个模式,以便条目可以引用不同的模式。

编辑:
好的,在阅读了文档的具体部分后,我想我明白你的问题是什么。该参考在这一点上不是很清楚,但据我了解,只有具有一个顶级节点的条目才能绑定到 XSD 模式。
由于 XSD 架构需要一个定义所用 XSD 文件的顶级节点,因此无法验证包含多个顶级元素的片段。我没试过,但我觉得做不到。
然而,定义一个 CONTENT 列、修改一个 XSD 并存储两者似乎是有效的,一个顶级节点引用 XSD 的 XML 以及只检查格式正确的 XML 片段。可以使用上面 select 语句中显示的 XPath 查询语言访问片段。
关于性能影响,我不能告诉你太多。参考文献提到 XSD 是内联存储的,因此这将需要在 db 中增加一些空间。XPath 查询也需要执行。尽管 xpath 通常非常快,但我猜它可能会降低性能,因为它需要在每一行上执行才能得到结果。可以肯定的是,我认为您必须根据存储的 xml 的大小和复杂性以及 xpath 表达式检查特定查询的执行计划。

于 2011-03-31T21:45:42.797 回答