openxml
openxml 通过 xml 文档提供行集视图。由于openxml 是行集提供程序,因此可在会出现行集提供程序(如表、视图或 openrowset 函数)的 transact-sql 语句中使用 openxml。
语法
openxml(idoc int [in],rowpattern nvarchar[in],[flags byte[in]])
[with (schemadeclaration | tablename)]
参数
idoc
是 xml 文档的内部表式法的文档句柄。通过调用 sp_xml_preparedocument 创建 xml 文档的内部表式法。
rowpattern
是 xpath 模式,用来标识要作为行处理的节点(这些节点在 xml 文档中,该文档的句柄由 idoc 参数传递)。
flags
表示应在 xml 数据和关系行集间使用映射以及应如何填充溢出列。flag 为可选输入参数,可以是下列值之一。
| 字节值 | 描述 |
|---|---|
| 0 | 默认为以特性为中心的映射。 |
| 1 | 使用以特性为中心的映射。 在某些情况下,可以将它与 xml_elements 组合使用。使用时首先应用以特性为中心的映射,然后对于所有仍未处理的列应用以元素为中心的映射。 |
| 2 | 使用以元素为中心的映射。 在某些情况下,可以将它与 xml_attributes 组合使用。使用时先应用以特性为中心的映射,然后对于所有仍未处理的列应用以元素为中心的映射。 |
| 8 | 可与 xml_attributes 或 xml_elements 组合使用(逻辑 or)。 在检索的上下文中,该标志指明不应将已消耗的数据复制到溢出属性 @mp:xmltext。 |
schemadeclaration
是窗体的架构定义:
colname coltype [colpattern | metaproperty][, colname coltype [colpattern | metaproperty]...]
- colname
- 是行集中的列名。
- coltype
- 是行集中列的 sql 数据类型。如果列类型不同于特性的基础 xml 数据类型,那么将发生类型压制。如果列的类型是 timestamp,则当从 openxml 行集中进行选择时,将忽略 xml 文档中现有的值并返回自动填充值。
- colpattern
- 是可选的通用 xpath 模式,它说明应如何将 xml 节点映射到列。如果没有指定 colpattern,那么发生默认的映射(由 flags 指定的以特性为中心或以元素为中心的映射)。
指定为 colpattern 的 xpath 模式用于指定特殊的映射性质(如果发生以特性为中心和以元素为中心的映射),这些特殊的映射性质可以重写或增强由标志所指定的默认映射。
指定为 colpattern 的通用 xpath 模式也支持元属性。
- metaproperty
- 是由 openxml 提供的元属性之一。如果指定元属性,则该列包含元属性提供的信息。这些元属性使您得以析取 xml 节点的信息(如相对位置、命名空间信息),以提供比文本化表示法更详细的信息。
tablename
如果具有期望架构的表已经存在且不要求列模式,则为给定的表名(而不是 schemadeclaration)。
通过使用 schemadeclaration 或者指定一个现有的 tablename,with 子句提供一种行集格式(根据需要还提供其它映射信息)。如果没有指定可选的 with 子句,那么以 edge table 格式返回结果。边缘表在单个表中表示 xml 文档的细密结构(例如,元素/特性名、文档层次结构、命名空间、pi 等)。
下表描述边缘表的结构。
| 列名 | 数据类型 | 描述 |
|---|---|---|
| id | bigint | 是文档节点的唯一 id。
根元素的 id 值为 0。保留负 id 值。 |
| parentid | bigint | 标识节点的父节点。此 id 所标识的父节点不一定是父元素,而是取决于此 id 所标识节点的子节点的 nodetype。例如,如果节点是文本节点,则其父节点可能是特性节点。
如果节点位于 xml 文档的顶层,则其 parentid 为 null。 |
| nodetype | int | 标识节点类型。是对应于 xml dom 节点类型编号的整数(有关节点信息,请参见 dom)。
三种节点类型是: 1 = 元素节点 |
| localname | nvarchar | 给出元素或特性的本地名称。如果 dom 对象没有名称则为 null。 |
| prefix | nvarchar | 是节点名称的命名空间前缀。 |
| namespaceuri | nvarchar | 是节点的命名空间 uri。如果值是 null,则命名空间不存在。 |
| datatype | nvarchar | 是元素或特性行的实际数据类型,否则是 null。从内嵌 dtd 中或从内嵌架构中推断数据类型。 |
| prev | bigint | 是前一个兄弟元素的 xml id。如果前面没有兄弟元素则为 null。 |
| text | ntext | 包含文本格式的特性值或元素内容(如果边缘表项不需要值则为 null)。 |