FOR XML (SQL Server)FOR XML (SQL Server)

DIESES THEMA GILT FÜR:jaSQL Server (ab 2008)neinAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Weitere Informationen, die sich auf vorherige Versionen von SQL Server beziehen, finden Sie unter FOR XML (SQL Server).For content related to previous versions of SQL Server, see FOR XML (SQL Server).

Eine SELECT-Abfrage gibt Ergebnisse als Rowset zurück.A SELECT query returns results as a rowset. Sie können optional die formalen Ergebnisse einer SQL-Abfrage als XML abrufen, indem Sie die FOR XML-Klausel in der Abfrage angeben.You can optionally retrieve formal results of a SQL query as XML by specifying the FOR XML clause in the query. Die FOR XML-Klausel kann in Abfragen der obersten Ebene sowie in Unterabfragen verwendet werden.The FOR XML clause can be used in top-level queries and in sub queries. Die FOR XML-Klausel der obersten Ebene kann nur in der SELECT-Anweisung verwendet werden.The top-level FOR XML clause can be used only in the SELECT statement. In Unterabfragen kann FOR XML in den INSERT-, UPDATE- und DELETE-Anweisungen verwendet werden.In sub queries, FOR XML can be used in the INSERT, UPDATE, and DELETE statements. Die Klausel kann auch in Zuweisungsanweisungen verwendet werden.It can also be used in assignment statements.

In einer FOR XML-Klausel geben Sie einen der folgenden Modi an:In a FOR XML clause, you specify one of these modes:

  • RAWRAW

  • AUTOAUTO

  • EXPLICITEXPLICIT

  • PATHPATH

    Der RAW-Modus generiert ein einzelnes <row>-Element pro Zeile im Rowset, das von der SELECT-Anweisung zurückgegeben wird.The RAW mode generates a single <row> element per row in the rowset that is returned by the SELECT statement. Sie können eine XML-Hierarchie erstellen, indem Sie geschachtelte FOR XML-Abfragen schreiben.You can generate XML hierarchy by writing nested FOR XML queries.

    Der AUTO-Modus generiert mithilfe von Heuristik, basierend auf der Art der Angabe der SELECT-Anweisung, Schachtelung in dem sich ergebenden XML.The AUTO mode generates nesting in the resulting XML by using heuristics based on the way the SELECT statement is specified. Sie besitzen nur 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 zu erstellen, die über die XML-Form hinausgeht, die von der Heuristik des AUTO-Modus generiert wird.The nested FOR XML queries can be written to generate XML hierarchy beyond the XML shape that is generated by AUTO mode heuristics.

    Der EXPLICIT-Modus lässt eine größere Kontrolle über die Form des XML zu.The EXPLICIT mode allows more control over the shape of the XML. Sie können Attribute und Elemente beliebig mischen, um die Form des XML zu bestimmen.You can mix attributes and elements at will in deciding the shape of the XML. Aufgrund der Abfrageausführung ist ein bestimmtes Format für das sich ergebende Rowset erforderlich, das generiert wird.It requires a specific format for the resulting rowset that is generated because of query execution. Dieses Rowsetformat wird anschließend der XML-Form zugeordnet.This rowset format is then mapped into XML shape. Die Leistungsfähigkeit des EXPLICIT-Modus beruht auf der Möglichkeit, Attribute und Elemente beliebig zu mischen, Wrapper und verschachtelte komplexe Eigenschaften, durch Leerzeichen getrennte Werte (das OrderID-Attribut kann z. B. eine Liste von Bestellungs-ID-Werten besitzen) und gemischte Inhalte erstellen zu können.The power of EXPLICIT mode is to mix attributes and elements at will, create wrappers and nested complex properties, create space-separated values (for example, OrderID attribute may have a list of order ID values), and mixed contents.

    Das Schreiben von Abfragen für den EXPLICIT-Modus kann jedoch aufwendig sein.However, writing EXPLICIT mode queries can be cumbersome. Sie können einige der neuen FOR XML-Funktionen verwenden; Sie können z. B. verschachtelte Abfragen für den FOR XML RAW/AUTO/PATH-Modus und die TYPE-Direktive schreiben, statt den EXPLICIT-Modus zum Generieren der Hierarchien zu verwenden.You can use some of the new FOR XML capabilities, such as writing nested FOR XML RAW/AUTO/PATH mode queries and the TYPE directive, instead of using EXPLICIT mode to generate the hierarchies. Die geschachtelten FOR XML-Abfragen können beliebiges XML erstellen, das mithilfe des EXPLICIT-Modus generiert werden kann.The nested FOR XML queries can produce any XML that you can generate by using the EXPLICIT mode. Weitere Informationen finden Sie unter Verwenden von geschachtelten FOR XML-Abfragen und TYPE-Direktive in FOR XML-Abfragen.For more information, see Use Nested FOR XML Queries and TYPE Directive in FOR XML Queries.

    Der PATH-Modus stellt zusammen mit der Möglichkeit geschachtelter FOR XML-Abfragen die Flexibilität des EXPLICIT-Modus auf einfachere Weise bereit.The PATH mode together with the nested FOR XML query capability provides the flexibility of the EXPLICIT mode in a simpler manner.

    Diese Modi gelten ausschließlich für die Ausführung der Abfrage, für die sie festgelegt wurden.These modes are in effect only for the execution of the query for which they are set. Sie wirken sich nicht auf die Ergebnisse nachfolgender Abfragen aus.They do not affect the results of any subsequent queries.

    FOR XML ist für keine Auswahl gültig, die mit einer FOR BROWSE-Klausel verwendet wird.FOR XML is not valid for any selection that is used with a FOR BROWSE clause.

BeispielExample

So ruft die folgende SELECT -Anweisung Informationen aus den Sales.Customer - und Sales.SalesOrderHeader -Tabellen der AdventureWorks2012 -Datenbank ab.The following SELECT statement retrieves information from the Sales.Customer and Sales.SalesOrderHeader tables in the AdventureWorks2012 database. Diese Abfrage gibt den AUTO -Modus in der FOR XML -Klausel an:This query specifies the AUTO mode in the FOR XML clause:

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 ServernamenThe FOR XML Clause and Server Names

Wenn eine SELECT-Anweisung mit einer FOR XML-Klausel einen vierteiligen Namen in der Abfrage angibt, wird der Servername im sich ergebenden XML-Dokument nicht zurückgegeben, wenn die Abfrage auf dem lokalen Computer ausgeführt wird.When a SELECT statement with a FOR XML clause specifies a four-part name in the query, the server name is not returned in the resulting XML document when the query is executed on the local computer. Wenn die Abfrage jedoch auf einem Netzwerkserver ausgeführt wird, wird der Servername als vierteiliger Name zurückgegeben.However, the server name is returned as the four-part name when the query is executed on a network server.

Angenommen, Sie haben die folgende Abfrage vorliegen:For example, consider this query:

SELECT TOP 1 LastName  
FROM ServerName.AdventureWorks2012.Person.Person  
FOR XML AUTO  

Wenn ServerName ein lokaler Server ist, gibt die Abfrage Folgendes zurück:When ServerName is a local server, the query returns the following:

<AdventureWorks2012.Person.Person LastName="Achong" />  

Wenn ServerName ein Netzwerkserver ist, gibt die Abfrage Folgendes zurück:When ServerName is a network server, the query returns the following:

<ServerName.AdventureWorks2012.Person.Person LastName="Achong" />  

Diese potenzielle Mehrdeutigkeit kann vermieden werden, indem Sie den folgenden Alias angeben:This potential ambiguity can be avoided by specifying this alias:

SELECT TOP 1 LastName  
FROM ServerName.AdventureWorks2012.Person.Person x  
FOR XML AUTO   

Diese Abfrage gibt Folgendes zurück:This query returns the following:

<x LastName="Achong"/>  

Weitere Informationen finden Sie unterSee Also

Basissyntax der FOR XML-Klausel Basic Syntax of the FOR XML Clause
Verwenden des RAW-Modus mit FOR XML Use RAW Mode with FOR XML
Verwenden des AUTO-Modus mit FOR XML Use AUTO Mode with FOR XML
Verwenden des EXPLICIT-Modus mit FOR XML Use EXPLICIT Mode with FOR XML
Verwenden des PATH-Modus mit FOR XML Use PATH Mode with FOR XML
OPENXML (SQL Server) OPENXML (SQL Server)
Hinzufügen von Namespaces zu Abfragen mit WITH XMLNAMESPACESAdd Namespaces to Queries with WITH XMLNAMESPACES