webentwicklung-frage-antwort-db.com.de

Konvertieren Sie XML in Table SQL Server

Ich frage mich, wie ich XML-Daten lesen und in eine Tabelle in TSQL umwandeln kann.

Zum Beispiel:

<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>      

Zu

8   3   8   8   25  4568457
3   3   1   2   72  4568457
46
Sanchitos

Dies ist die Antwort, hoffe es hilft jemandem :)

Zunächst gibt es zwei Varianten, wie die XML geschrieben werden kann:

1

<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>

Antworten:

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" />

Antworten:

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)

Genommen von:

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

  2. http://msdn.Microsoft.com/de-de/library/ms345117(SQL.90).aspx

78
Sanchitos

Verwenden Sie sp_xml_preparedocument.

Detaillierte Informationen finden Sie unter: http://technet.Microsoft.com/en-gb/library/ms186918.aspx

Wie für deine Frage:

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 
24
xiaoyifang

Um eine solche Konvertierungsaufgabe auszuführen, können Sie ein XML-Mapping-Konvertierungstool wie XMLFox Advance verwenden. Wir verwenden den XMLFox Advance-Konverter seit Jahren, um XML-Daten von Verbrauchern in SQL Server-Tabellen umzuwandeln.

0
XMLStick

Wenn Sie tief verschachtelte XML-Dokumente (oder Json, HTML, SQL) mit rekursiven Knoten (Knoten 'Ordner' im Knoten 'Ordner' im Knoten 'Ordner') eines gemischten komplexen Typs ohne XSD/DTD-Schema haben, können Sie das Tool verwenden eXtractorONE (eXtractor.ONE) . Keine Programmierung erforderlich, kein Xquery, kein XSLT, Konfiguration nahezu null. Keine Begrenzung der Größe. Zeigen Sie einfach auf den Ordner mit XML-Dokumenten, wählen Sie Ihre Zieldatenbank aus und führen Sie sie aus.

0
eXtractorONE