代码之家  ›  专栏  ›  技术社区  ›  Sanchitos

将XML转换为表SQL Server

  •  47
  • Sanchitos  · 技术社区  · 15 年前

    我想知道如何读取XML数据并将其转换为TSQL中的表?

    例如:

    <row>
        <IdInvernadero>8</IdInvernadero>
        <IdProducto>3</IdProducto>
        <IdCaracteristica1>8</IdCaracteristica1>
        <IdCaracteristica2>8</IdCaracteristica2>
        <Cantidad>25</Cantidad>
        <Folio>4568457</Folio>
    </row>
    <row>
        <IdInvernadero>3</IdInvernadero>
        <IdProducto>3</IdProducto>
        <IdCaracteristica1>1</IdCaracteristica1>
        <IdCaracteristica2>2</IdCaracteristica2>
        <Cantidad>72</Cantidad>
        <Folio>4568457</Folio>
    </row>      
    

    到

    8   3   8   8   25  4568457
    3   3   1   2   72  4568457
    
    4 回复  |  直到 15 年前
        1
  •  79
  •   KRM    7 年前

    这就是答案,希望它能帮助别人:)

    首先,XML的编写方式有两种不同:

    一

    <row>
        <IdInvernadero>8</IdInvernadero>
        <IdProducto>3</IdProducto>
        <IdCaracteristica1>8</IdCaracteristica1>
        <IdCaracteristica2>8</IdCaracteristica2>
        <Cantidad>25</Cantidad>
        <Folio>4568457</Folio>
    </row>
    <row>
        <IdInvernadero>3</IdInvernadero>
        <IdProducto>3</IdProducto>
        <IdCaracteristica1>1</IdCaracteristica1>
        <IdCaracteristica2>2</IdCaracteristica2>
        <Cantidad>72</Cantidad>
        <Folio>4568457</Folio>
    </row>
    

    答:

    SELECT  
           Tbl.Col.value('IdInvernadero[1]', 'smallint'),  
           Tbl.Col.value('IdProducto[1]', 'smallint'),  
           Tbl.Col.value('IdCaracteristica1[1]', 'smallint'),
           Tbl.Col.value('IdCaracteristica2[1]', 'smallint'),
           Tbl.Col.value('Cantidad[1]', 'int'),
           Tbl.Col.value('Folio[1]', 'varchar(7)')
    FROM   @xml.nodes('//row') Tbl(Col)  
    

    2。

    <row IdInvernadero="8" IdProducto="3" IdCaracteristica1="8" IdCaracteristica2="8" Cantidad ="25" Folio="4568457" />                         
    <row IdInvernadero="3" IdProducto="3" IdCaracteristica1="1" IdCaracteristica2="2" Cantidad ="72" Folio="4568457" />
    

    答:

    SELECT  
           Tbl.Col.value('@IdInvernadero', 'smallint'),  
           Tbl.Col.value('@IdProducto', 'smallint'),  
           Tbl.Col.value('@IdCaracteristica1', 'smallint'),
           Tbl.Col.value('@IdCaracteristica2', 'smallint'),
           Tbl.Col.value('@Cantidad', 'int'),
           Tbl.Col.value('@Folio', 'varchar(7)')
    
    FROM   @xml.nodes('//row') Tbl(Col)
    

    取自:

    1. http://kennyshu.blogspot.com/2007/12/convert-xml-file-to-table-in-sql-2005.html

    2. http://msdn.microsoft.com/en-us/library/ms345117(SQL.90).aspx

        2
  •  24
  •   Bridge user2173966    13 年前

    使用 sp_xml_preparedocument .

    详细检查: http://technet.microsoft.com/en-gb/library/ms186918.aspx

    关于你的问题:

    DECLARE @XML XML
    SET @XML = '<rows><row>
        <IdInvernadero>8</IdInvernadero>
        <IdProducto>3</IdProducto>
        <IdCaracteristica1>8</IdCaracteristica1>
        <IdCaracteristica2>8</IdCaracteristica2>
        <Cantidad>25</Cantidad>
        <Folio>4568457</Folio>
    </row>
    <row>
        <IdInvernadero>3</IdInvernadero>
        <IdProducto>3</IdProducto>
        <IdCaracteristica1>1</IdCaracteristica1>
        <IdCaracteristica2>2</IdCaracteristica2>
        <Cantidad>72</Cantidad>
        <Folio>4568457</Folio>
    </row></rows>'
    
    DECLARE @handle INT  
    DECLARE @PrepareXmlStatus INT  
    
    EXEC @PrepareXmlStatus= sp_xml_preparedocument @handle OUTPUT, @XML  
    
    SELECT  *
    FROM    OPENXML(@handle, '/rows/row', 2)  
        WITH (
        IdInvernadero INT,
        IdProducto INT,
        IdCaracteristica1 INT,
        IdCaracteristica2 INT,
        Cantidad INT,
        Folio INT
        )  
    
    
    EXEC sp_xml_removedocument @handle 
    
        3
  •  0
  •   eXtractorONE    10 年前

    如果您有深度嵌套的XML文档(或JSON、HTML、SQL),其中递归节点(节点“文件夹”中的节点“文件夹”中的节点“文件夹”)是混合复杂类型,没有XSD/DTD架构,则可以使用工具提取器一(提取器一)。 不需要编程,不需要XQuery,不需要XSLT,几乎没有配置。大小没有限制。只需指向包含XML文档的文件夹,选择目标数据库并运行它。

        4
  •  0
  •   XMLStick    9 年前

    为了完成这样的转换任务,您可以考虑使用一些XML映射转换工具,比如 XMLFox Advance . 多年来,我们一直使用XMLFOX高级转换器将使用者XML数据转换为SQL Server表。