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.