sql 用openxml 将xml转换为数据表Table

CREATE PROCEDURE up_OpenXml
    (
    @xml XML 
    )
    AS
    BEGIN
    DECLARE @Pointer INT
    EXECUTE sp_xml_preparedocument @Pointer OUTPUT,@xml  --指向内存中XML文档的句柄
    SELECT * INTO People   
    FROM
    OPENXML (@Pointer,'/People/Person',2)                   --根据句柄按一定规则打开对应字段
    WITH
    (
    name  NVARCHAR(20),
    age INT,
    sex NVARCHAR(10)
    )
    EXEC sp_xml_removedocument @Pointer            --使用完后删除句柄
    SELECT * FROM People
    DROP TABLE People
    END


EXEC  up_OpenXml  '<People>
    <Person>
        <name> zhangsan</name>
        <age>20</age>
        <sex>man</sex>
    </Person>
    <Person>
        <name> Lisi</name>
        <age>20</age>
        <sex>woman</sex>
    </Person>
</People>  '

 
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 数据和关系行集间使用映射以及应如何填充溢出列。 flags 为可选输入参数,可以是下列值之一。

  

字节值

说明

0

默认为“以属性为中心”的映射。

1

使用“以属性为中心”的映射。 可以与 XML_ELEMENTS 一起使用。 这种情况下,首先应用“以属性为中心”的映射,然后对所有未处理的列应用“以元素为中心”的映射。

2

使用“以元素为中心”的映射。 可以与 XML_ATTRIBUTES 一起使用。 这种情况下,首先应用“以属性为中心”的映射,然后对所有未处理的列应用“以元素为中心”的映射。

8

可与 XML_ATTRIBUTES 或 XML_ELEMENTS 组合使用(逻辑或)。 在检索的上下文中,该标志指示不应将已使用的数据复制到溢出属性 @mp:xmltext

 

 

 

 

 

 

 

 

 

窗体的架构定义:ColNameColType [ColPattern | MetaProperty] [,ColNameColType [ColPattern |MetaProperty]...]

ColName

行集中的列名。

ColType

行集中列的 SQL Server 数据类型。 如果列类型不同于属性的基础 xml 数据类型,则将发生类型强制。

ColPattern

可选的通用 XPath 模式,它说明应如何将 XML 节点映射到列。 如果没有指定 ColPattern,则发生默认映射(由 flags 指定的“以属性为中心”或“以元素为中心”的映射)。

指定为 ColPattern 的 XPath 模式用于指定特殊的映射性质(如果发生“以属性为中心”和“以元素为中心”的映射),这些特殊的映射性质可以重写或增强由 flags 所指示的默认映射。

指定为 ColPattern 的通用 XPath 模式也支持元属性。

MetaProperty

由 OPENXML 提供的元属性之一。 如果指定 MetaProperty,则该列包含元属性提供的信息。 使用元属性可以提取有关 XML 节点的信息(如相对位置和命名空间信息)。 它提供了比文本表示形式更详细的信息。

TableName

如果具有所需架构的表已经存在且不要求列模式,则为给定的表名(而不是 SchemaDeclaration)。

 

转载于:https://www.cnblogs.com/ITCoNan/p/4895058.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值