복붙노트

[SQL] 표 SQL 서버에 XML을 변환

SQL

표 SQL 서버에 XML을 변환

나는 내가 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

해결법

  1. ==============================

    1.이 대답은, 누군가 도움이되기를 바랍니다 :)

    이 대답은, 누군가 도움이되기를 바랍니다 :)

    먼저 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)  
    
    <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)
    

    에서 발췌 :

  2. ==============================

    2.를 sp_xml_preparedocument 저장 프로 시저가 XML을 구문 분석되고 OPENXML 행 집합 공급자가 당신에게 XML 데이터의 관계형 뷰를 표시합니다.

    를 sp_xml_preparedocument 저장 프로 시저가 XML을 구문 분석되고 OPENXML 행 집합 공급자가 당신에게 XML 데이터의 관계형 뷰를 표시합니다.

    자세한 내용과 더 많은 예제를 들어 OPENXML 설명서를 참조하십시오.

    귀하의 질문에 관해서는,

    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. from https://stackoverflow.com/questions/3989395/convert-xml-to-table-sql-server by cc-by-sa and MIT license