2 Stimmen

Wie kann ich Daten aus SQL Server 2005 in das XML-Format importieren und exportieren?

Ich bin sehr verwirrt darüber, wie SQL Server 2005 das Importieren und Exportieren von XML-Dateien unterstützt. Ich war der Meinung, dass BCP der richtige Weg ist. Nachdem ich jedoch die gesamte Dokumentation gelesen habe, scheint es keine Möglichkeit zu geben, eine reguläre Tabelle einfach in das XML-Format zu exportieren. Der Grund für meine Frage ist, dass ich mit einem Kunden arbeite, der mir Datenaktualisierungen im XML-Format senden wird. Wir haben beide die gleiche Datenbank mit identischen Strukturen. Er hat mir Beispiel-XML-Dateien geschickt. Ich bin davon ausgegangen, dass es eine sehr einfache Möglichkeit gibt, die Dateien zu importieren, aber ich komme nicht dahinter. Kann mir jemand erklären, wie man eine XML-Datei nimmt und die Daten in eine bestehende Tabelle importiert? Es sollte einfach sein, da die XML-Datei aus einer Tabelle mit genau derselben Struktur erzeugt wurde.

Danke, Corey

2voto

Warum sollte man überhaupt XML als Austauschformat verwenden?

Wenn Sie auf beiden Seiten genau das gleiche Datenmodell haben, sind einfache Textdateien oder BCP-Dateien perfekt für Ihre Bedürfnisse geeignet und außerdem viel kleiner (d.h. sie lassen sich schneller extrahieren und laden)!

Nur weil XML "state of the art" ist, heißt das nicht, dass es immer die beste Wahl ist! Wenn Sie glauben, dass Sie irgendwann in der Zukunft Daten mit Dritten austauschen müssen, die nicht das gleiche Datenmodell oder sogar die gleiche Plattform oder Schnittstelle verwenden, sieht die Sache natürlich anders aus.

1voto

Zaki Punkte 6827

SQL Server 2005 ermöglicht die Speicherung von XML-Daten auf zwei Arten: - Als Rowset & - Eine XML-Spalte

Speichern von XML-Daten in einem Rowset

  • Wenn Ihr Kunde Ihnen die Daten als XML-Dokument geschickt hat und Sie dieses speichern müssen diese Daten in einer Datenbanktabelle zu speichern, müssen Sie zuerst müssen Sie die XML-Daten "schreddern". SQL Server ermöglicht es Ihnen, XML-Daten zu schreddern durch Verwendung der OPENXML Funktion und die zugehörigen gespeicherten Prozeduren.

Das Schreddern von XML-Dokumenten umfasst die folgenden Aufgaben:

  • i) Parsen Sie das XML-Dokument SQL Server 2005 bietet die sp_xml_preparedocument gespeicherte Prozedur zum Parsen des XML-Dokuments. Diese gespeicherte Prozedur liest das xml Dokument und parst es mit dem MSXML Parser. Das geparste Dokument ist ein interne Baumdarstellung von verschiedenen Knoten im Xml-Dokument wie Elemente, Attribute, Text und Kommentare.
  • ii) Rufen Sie das Rowset aus dem Baum ab. Jetzt müssen Sie die Daten aus den verfügbaren Xml-Daten extrahieren. Sie verwenden openxml Funktion für diesen Zweck und zur Erzeugung eines Rowsets im Arbeitsspeicher aus den geparsten Daten zu erzeugen. Syntax: openxml(idoc int[in],rowpattern nvarchar[in],[flags byte[in]]) [WITH (SchemaDeclaration | TableName)]
    idoc- gibt das Handle des Dokuments an internen Baumdarstellung von xml doc rowpattern- spezifiziert das XPath Muster an, das verwendet wird, um die Knoten zu identifizieren die als Zeilen verarbeitet werden sollen. flags- gibt die Abbildung an, die verwendet werden soll zwischen Xml-Daten und relationalem Rowset verwendet werden soll, und wie die Spillover-Spalte gefüllt werden soll. Sie ist optional und kann 0,1,2,3 haben, um den Standardwert zu verwenden Mapping zu verwenden, um Attribut Werte abzurufen, um Elementwerte abzurufen und zum Abrufen beider Werte abzurufen. SchemaDeklaration- spezifiziert das Rowset-Schema Deklaration für die zurückzugebenden Spalten zurückgegeben werden, indem eine Kombination aus Spaltennamen, Datentypen und Mustern. TableName- spezifiziert den Tabellenname an, der anstelle von der SchemaDeclaration angegeben werden kann, wenn eine Tabelle mit dem gewünschten Schema bereits existiert und keine Muster erforderlich sind.
  • iii) Speichern Sie die Daten aus dem Rowset. Sie können das Rowset verwenden, das von openxml um die Daten zu speichern, so wie Sie es bei jeder anderen Klage tun würden. Rowset. Sie können das Rowset Daten in permanente Tabellen in einer Datenbank einfügen.
  • iv) Löschen Sie den Speicher. Sie müssen den Speicher freigeben, in dem Sie das Rowset das Rowset gespeichert haben. Dazu verwenden Sie die sp_xml_removedocument gespeicherte Prozedur.

Die folgenden Daten sind zum Beispiel in einem XML-Dokument enthalten:

    DECLARE @Doc int
    DECLARE @XMlDoc nvarchar(1000)
    SET @XMLDoc = N'<ROOT>
    <Customer CustomerID="JHO1" Name="Jack">
      <Order OrderID="1001" CustomerID="JH01"
             OrderDate="2009-07-04T00:00:00">
      <OrderDetail ProductID="11" Quantity="12"/>
      <OrderDetail ProductID="22" Quantity="10"/>
     </Order>
    </Customer>
<Customer CustomerID="SG01" Name="Steve">
     <Order OrderID="1002" CustomerID="SG01"
            OrderDate="2009-08-16T00:00:00">
    <OrderDetail ProductID="32" Quantity="3"/>
   </Order>
  </Customer>
</ROOT>'

Um diese Xml-Daten in einem Rowset anzuzeigen, müssen Sie die folgenden Anweisungen ausführen:

1. Interne Darstellung eines Xml-Dokuments erstellen EXEC sp_xml_preparedocument @Doc OUTPUT, @XMLDoc

2. Führen Sie die folgende Abfrage aus, um die Daten mit der Funktion OPENXML in einer Tabelle zu speichern:

INSERT INTO CustomerDetails
 SELECT *
 FROM openxml (@Doc, '/ROOT/Customer' , 1)
      WITH (CustomerID varchar(10),
            Name varchar(20) )

Die Daten werden wie in der Tabelle angezeigt:


CustomerID | Name    |
___________|_________|
JH01       | Jack    |
           |         | 
SG01       | Steve   |
___________|_________|

3. Entfernen Sie den internen Baum aus dem Speicher durch Ausführen von

EXEC sp_xml_removedocument @Doc

Sie sind jetzt fertig.

Ich denke, diese Methode würde eher helfen als die andere, d.h. die Speicherung von XML-Daten als XML-Spalte.

0voto

gbn Punkte 407102

XML in SQL Server importieren

XML-Spalte in SQL suchen

Sie müssen die XML-Datei in ein tabellenähnliches Format parsen. Denken Sie daran: XML ist nur Text, also müssen Sie SQL Server mitteilen, welche Datentypen es gibt usw.

Es gibt kein Patentrezept INSERT MyTable FROM File = 'bob.xml'

0voto

ahains Punkte 1872

Ich nehme an, der Client verwendet FOR XML, um die relationalen Daten als XML-Dokument zu verpacken? Es gibt keine automatische Möglichkeit, die XML-Daten in die ursprüngliche relationale Struktur zurückzuschneiden, aber Sie sollten in der Lage sein, dies programmatisch zu tun, wenn die ursprüngliche XML-Generierung auch die XMLSCHEMA-Direktive verwendet. Wenn der Client diese Direktive enthält, wird ein XML-Schema generiert, das beschreibt, welche Spalte (und deren Typ) wo in der XML-Instanz dargestellt wird. Ich habe vor einiger Zeit angefangen, mit diesem Ansatz zu spielen, ihn aber nie zu Ende gebracht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X