Freigeben über


FOR XML (SQL Server)

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