Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Eine SELECT-Abfrage gibt Ergebnisse als Rowset zurück. Sie können optional formale Ergebnisse einer SQL-Abfrage als XML abrufen, indem Sie die FOR XML-Klausel in der Abfrage angeben. Die FOR XML-Klausel kann in Abfragen der obersten Ebene und in Unterabfragen verwendet werden. Die FOR XML-Klausel der obersten Ebene kann nur in der SELECT-Anweisung verwendet werden. In Unterabfragen kann FOR XML in den INSERT-, UPDATE- und DELETE-Anweisungen verwendet werden. Sie kann auch in Zuordnungsanweisungen verwendet werden.
In einer FOR XML-Klausel geben Sie einen der folgenden Modi an:
ROH
AUTO
EXPLIZIT
PFAD
Der RAW-Modus generiert ein einzelnes <Zeilenelement> pro Zeile im Rowset, das von der SELECT-Anweisung zurückgegeben wird. Sie können XML-Hierarchie generieren, indem Sie geschachtelte FOR XML-Abfragen schreiben.
Der AUTO-Modus generiert Schachtelung im resultierenden XML mithilfe von Heuristiken basierend auf der Art und Weise, wie die SELECT-Anweisung angegeben wird. Sie haben minimale Kontrolle über die Form des generierten XML.You have minimal control over the shape of the XML generated. Die geschachtelten FOR XML-Abfragen können geschrieben werden, um eine XML-Hierarchie jenseits der XML-Struktur zu generieren, die von den AUTO-Modus-Heuristiken generiert wird.
Der EXPLICIT-Modus ermöglicht eine bessere Kontrolle über die Struktur des XML. Sie können Attribute und Elemente bei der Entscheidung über die Form des XML-Codes kombinieren. Es erfordert ein bestimmtes Format für das resultierende Rowset, das aufgrund der Abfrageausführung generiert wird. Dieses Rowsetformat wird dann xml-Shape zugeordnet. Die Leistungsfähigkeit des EXPLICIT-Modus besteht darin, Attribute und Elemente nach Bedarf zu mischen, Wrapper und geschachtelte komplexe Eigenschaften zu erstellen, durch Leerzeichen getrennte Werte zu erzeugen (z. B. das OrderID-Attribut kann eine Liste von OrderID-Werten aufweisen) und gemischte Inhalte.
Das Schreiben von EXPLIZIT-Modus-Abfragen kann jedoch umständlich sein. Sie können einige der neuen FOR XML-Funktionen verwenden, z. B. das Schreiben geschachtelter FOR XML RAW/AUTO/PATH-Modusabfragen und die TYPE-Direktive, anstatt den EXPLIZITen Modus zum Generieren der Hierarchien zu verwenden. Die geschachtelten FOR XML-Abfragen können jeden XML-Code erzeugen, den Sie mithilfe des EXPLICIT-Modus generieren können. Weitere Informationen finden Sie unter Verwenden von geschachtelten FOR XML-Abfragen und TYPE-Direktiven in FOR XML-Abfragen.
Der PATH-Modus bietet zusammen mit der geschachtelten FOR XML-Abfragefunktion die Flexibilität des EXPLICIT-Modus auf einfachere Weise.
Diese Modi gelten nur für die Ausführung der Abfrage, für die sie festgelegt sind. Sie wirken sich nicht auf die Ergebnisse nachfolgender Abfragen aus.
FOR XML ist für eine Auswahl, die mit einer FOR BROWSE-Klausel verwendet wird, ungültig.
Beispiel
Die folgende SELECT Anweisung ruft Informationen aus den Sales.Customer Und-Tabellen Sales.SalesOrderHeader in der AdventureWorks2012 Datenbank ab. Diese Abfrage gibt den AUTO Modus in der FOR XML Klausel an:
USE AdventureWorks2012
GO
SELECT Cust.CustomerID,
OrderHeader.CustomerID,
OrderHeader.SalesOrderID,
OrderHeader.Status
FROM Sales.Customer Cust
INNER JOIN Sales.SalesOrderHeader OrderHeader
ON Cust.CustomerID = OrderHeader.CustomerID
FOR XML AUTO
Die FOR XML-Klausel und Servernamen
Wenn eine SELECT-Anweisung mit einer FOR XML-Klausel einen vierteiligen Namen in der Abfrage angibt, wird der Servername nicht im resultierenden XML-Dokument zurückgegeben, wenn die Abfrage auf dem lokalen Computer ausgeführt wird. Der Servername wird jedoch als vierteiliger Name zurückgegeben, wenn die Abfrage auf einem Netzwerkserver ausgeführt wird.
Betrachten Sie z. B. diese Abfrage:
SELECT TOP 1 LastName
FROM ServerName.AdventureWorks2012.Person.Person
FOR XML AUTO
Wenn ServerName es sich um einen lokalen Server handelt, gibt die Abfrage Folgendes zurück:
<AdventureWorks2012.Person.Person LastName="Achong" />
Wenn ServerName es sich um einen Netzwerkserver handelt, gibt die Abfrage Folgendes zurück:
<ServerName.AdventureWorks2012.Person.Person LastName="Achong" />
Diese potenzielle Mehrdeutigkeit kann vermieden werden, indem Sie diesen Alias angeben:
SELECT TOP 1 LastName
FROM ServerName.AdventureWorks2012.Person.Person x
FOR XML AUTO
Diese Abfrage gibt Folgendes zurück:
<x LastName="Achong"/>
Siehe auch
Grundlegende Syntax der FOR XML-Klausel
Verwenden des RAW-Modus mit FOR XML
Verwenden des AUTO-Modus mit FOR XML
Verwenden des EXPLIZITEN Modus mit FOR XML
Verwenden des PATH-Modus mit FOR XML
OPENXML (SQL Server)
Hinzufügen von Namespaces zu Abfragen mit WITH XMLNAMESPACES