Der AUTO-Modus generiert verschachtelte Elemente innerhalb des XML-Dokuments. Jede in der Auswahlliste referenzierte Tabelle wird als ein Element in der XML-Datei dargestellt. Die Reihenfolge der Verschachtelung basiert auf der Reihenfolge, in der die Tabellen in der Auswahlliste referenziert wurden. Wenn Sie den AUTO-Modus angeben, wird ein Element für jede Tabelle in der Auswahlliste generiert, und jede Spalte in dieser Tabelle ist ein separates Attribut.
FOR XML AUTO[, ELEMENTS ]
ELEMENTS Fordert FOR XML AUTO auf, im Ergebnis ein XML-Element anstatt eines Attributs für jede Spalte zu generieren. Zum Beispiel:
SELECT Employees.EmployeeID, Departments.DepartmentName FROM Employees JOIN Departments ON Employees.DepartmentID=Departments.DepartmentID ORDER BY EmployeeID FOR XML AUTO, ELEMENTS; |
In diesem Fall wird jede Spalte in der Ergebnismenge als ein separates Element zurückgegeben, und nicht als ein Attribut des <Employees>-Elements. Wenn NULL vorhanden ist, wird das Element im generierten XML-Dokument weggelassen.
<Employees> <EmployeeID>102</EmployeeID> <Departments> <DepartmentName>R & D</DepartmentName> </Departments> </Employees> <Employees> <EmployeeID>105</EmployeeID> <Departments> <DepartmentName>R & D</DepartmentName> </Departments> </Employees> <Employees> <EmployeeID>129</EmployeeID> <Departments> <DepartmentName>Sales</DepartmentName> </Departments> </Employees> ... |
Wenn Sie eine Abfrage ausführen, die FOR XML AUTO sowie Daten in BINARY-, LONG BINARY-, IMAGE- und VARBINARY-Spalten verwendet, werden Spalten automatisch im base64-kodiertem Format zurückgegeben. Standardmäßig wird NULL im Ergebnis weggelassen. Sie können NULL als leere Attribute zurückgeben, indem Sie die Option "for_xml_null_treatment" auf EMPTY setzen.
Hinweise zum Setzen der Option "for_xml_null_treatment" finden Sie unter for_xml_null_treatment-Option [Datenbank].
Sofern nicht anders angegeben, gibt der Datenbankserver die Zeilen einer Tabelle in einer beliebigen Reihenfolge zurück. Wenn Sie wollen, dass die Ergebnisse in einer bestimmten Reihenfolge angezeigt werden oder dass ein übergeordnetes Objekt (Parent) mehrere untergeordnete Objekte (Child) hat, müssen Sie eine ORDER BY-Klausel in die Abfrage aufnehmen, damit alle Child-Objekte benachbart sind. Wenn Sie keine ORDER BY-Klausel angeben, hängt die Verschachtelung der Ergebnisse vom Plan ab, der vom Optimierer ausgesucht wurde, was möglicherweise nicht zu der von Ihnen gewünschten Verschachtelung führt.
FOR XML AUTO gibt kein wohlgeformtes XML-Dokument zurück, weil das Dokument keinen einzelnen Stammknoten hat. Wenn ein <root>-Element erforderlich ist, können Sie eines einfügen, indem Sie die XMLELEMENT-Funktion verwenden. Zum Beispiel:
SELECT XMLELEMENT( NAME root, (SELECT EmployeeID AS id, GivenName AS name FROM Employees FOR XML AUTO ) ); |
Weitere Hinweise zur Funktion XMLELEMENT finden Sie unter XMLELEMENT-Funktion [Zeichenfolge].
Sie können die Attribut- oder Elementnamen ändern, die im XML-Dokument verwendet werden, indem Sie Aliasnamen angeben. Die folgende Abfrage benennt das ID-Attribut in "product_ID" um:
SELECT ID AS product_ID FROM Products WHERE Color='Black' FOR XML AUTO; |
Der folgende XML-Inhalt wird generiert:
<Products product_ID="302"/> <Products product_ID="400"/> <Products product_ID="501"/> <Products product_ID="700"/> |
Sie können auch die Tabelle mit einem Alias umbenennen. Die folgende Abfrage ändert den Namen der Tabelle zu "product_info":
SELECT ID AS product_ID FROM Products AS product_info WHERE Color='Black' FOR XML AUTO; |
Der folgende XML-Inhalt wird generiert:
<product_info product_ID="302"/> <product_info product_ID="400"/> <product_info product_ID="501"/> <product_info product_ID="700"/> |
Die folgende Abfrage generiert XML, das sowohl das <employee>- als auch das <department>-Element enthält, wobei das <employee>-Element (die Tabelle, die als erste in der Auswahlliste vorkommt) das übergeordnete Objekt des <department>-Elements darstellt.
SELECT EmployeeID, DepartmentName FROM Employees AS employee JOIN Departments AS department ON Employees.DepartmentID=Departments.DepartmentID ORDER BY EmployeeID FOR XML AUTO; |
Das folgende XML wird durch die oben stehende Abfrage generiert:
<employee EmployeeID="102"> <department DepartmentName="R & D"/> </employee> <employee EmployeeID="105"> <department DepartmentName="R & D"/> </employee> <employee EmployeeID="129"> <department DepartmentName="Sales;"/> </employee> <employee EmployeeID="148"> <department DepartmentName="Finance;"/> </employee> ... |
Ändern Sie die Reihenfolge der Spalte in der Select-Liste wie folgt:
SELECT DepartmentName, EmployeeID FROM Employees AS employee JOIN Departments AS department ON Employees.DepartmentID=Departments.DepartmentID ORDER BY 1, 2 FOR XML AUTO; |
Das Ergebnis wird folgendermaßen verschachtelt:
<department DepartmentName="Finance"> <employee EmployeeID="148"/> <employee EmployeeID="390"/> <employee EmployeeID="586"/> ... </department> <Department name="Marketing"> <employee EmployeeID="184"/> <employee EmployeeID="207"/> <employee EmployeeID="318"/> ... </department> ... |
Wieder enthält das für diese Abfrage generierte XML sowohl das <employee> als auch das <department>-Element, aber in diesem Fall ist das <department>-Element das übergeordnete Objekt des <employee>-Elements.
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |