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

Per contenuti relativi a versioni precedenti di SQL Server, vedere FOR XML (SQL Server).For content related to previous versions of SQL Server, see FOR XML (SQL Server).

Una query SELECT restituisce i risultati sotto forma di set di righe.A SELECT query returns results as a rowset. È possibile recuperare facoltativamente i risultati di una query SQL come codice XML specificando la clausola FOR XML nella query.You can optionally retrieve formal results of a SQL query as XML by specifying the FOR XML clause in the query. È possibile utilizzare la clausola FOR XML nelle query di livello principale e nelle sottoquery.The FOR XML clause can be used in top-level queries and in sub queries. La clausola FOR XML di livello principale può essere utilizzata solo nell'istruzione SELECT.The top-level FOR XML clause can be used only in the SELECT statement. Nelle sottoquery, è possibile utilizzare FOR XML nelle istruzioni INSERT, UPDATE e DELETE.In sub queries, FOR XML can be used in the INSERT, UPDATE, and DELETE statements. La clausola può inoltre essere utilizzata nelle istruzioni di assegnazione.It can also be used in assignment statements.

In una clausola FOR XML, è necessario specificare una delle modalità seguenti:In a FOR XML clause, you specify one of these modes:

  • RAWRAW

  • AUTOAUTO

  • EXPLICITEXPLICIT

  • PATHPATH

    Nella modalità RAW viene generato un singolo elemento <row> per ogni riga del set di righe restituito dall'istruzione SELECT.The RAW mode generates a single <row> element per row in the rowset that is returned by the SELECT statement. È possibile generare la gerarchia XML tramite la formulazione di query FOR XML nidificate.You can generate XML hierarchy by writing nested FOR XML queries.

    Nella modalità AUTO, il codice XML risultante è nidificato tramite l'approccio euristico determinato dalla modalità con cui viene specificata l'istruzione SELECT.The AUTO mode generates nesting in the resulting XML by using heuristics based on the way the SELECT statement is specified. Il controllo sulla forma del codice XML generato è minimo.You have minimal control over the shape of the XML generated. È possibile formulare query FOR XML nidificate che generano una gerarchia XML che esula dalla forma XML generata dall'approccio euristico della modalità AUTO.The nested FOR XML queries can be written to generate XML hierarchy beyond the XML shape that is generated by AUTO mode heuristics.

    La modalità EXPLICIT consente un maggiore controllo sulla forma del codice XML,The EXPLICIT mode allows more control over the shape of the XML. grazie alla possibilità di combinare gli attributi e gli elementi che definiscono tale forma.You can mix attributes and elements at will in deciding the shape of the XML. È richiesto un formato specifico per il set di righe generato in seguito all'esecuzione della query,It requires a specific format for the resulting rowset that is generated because of query execution. del quale viene quindi eseguito il mapping alla forma del codice XML.This rowset format is then mapped into XML shape. La modalità EXPLICIT consente di combinare elementi e attributi, di creare wrapper e proprietà complesse nidificate, di creare valori separati da spazi (ad esempio, l'attributo OrderID può includere un elenco di ID di ordine) e contenuti misti.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.

    La formulazione di query nella modalità EXPLICIT può tuttavia essere complessa.However, writing EXPLICIT mode queries can be cumbersome. Per generare le gerarchie, anziché utilizzare la modalità EXPLICIT è possibile utilizzare le nuove funzionalità di FOR XML, ad esempio la formulazione di query FOR XML nidificate in modalità RAW/AUTO/PATH e la direttiva TYPE.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. Le query FOR XML nidificate consentono di generare qualsiasi codice XML generabile tramite la modalità EXPLICIT.The nested FOR XML queries can produce any XML that you can generate by using the EXPLICIT mode. Per altre informazioni, vedere Utilizzo di query FOR XML nidificate e Direttiva TYPE nelle query FOR XML.For more information, see Use Nested FOR XML Queries and TYPE Directive in FOR XML Queries.

    L'utilizzo congiunto della modalità PATH e delle funzionalità per le query FOR XML nidificate consente di ottenere lo stesso livello di versatilità della modalità EXPLICIT, ma in un modo più semplice.The PATH mode together with the nested FOR XML query capability provides the flexibility of the EXPLICIT mode in a simpler manner.

    Queste modalità sono valide solo per l'esecuzione della query per la quale sono state impostateThese modes are in effect only for the execution of the query for which they are set. e non influiscono sui risultati di eventuali query successive.They do not affect the results of any subsequent queries.

    FOR XML non è valida per qualsiasi selezione utilizzata con una clausola FOR BROWSE.FOR XML is not valid for any selection that is used with a FOR BROWSE clause.

EsempioExample

L'istruzione SELECT seguente recupera informazioni dalle tabelle Sales.Customer e Sales.SalesOrderHeader del database AdventureWorks2012 .The following SELECT statement retrieves information from the Sales.Customer and Sales.SalesOrderHeader tables in the AdventureWorks2012 database. La query seguente specifica la modalità AUTO nella clausola FOR XML :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  

Clausola FOR XML e nomi di serverThe FOR XML Clause and Server Names

Se un'istruzione SELECT con una clausola FOR XML specifica un nome in quattro parti nella query, il nome del server non viene restituito nel documento XML risultante quando la query viene eseguita nel computer locale.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. Viene tuttavia restituito come nome in quattro parti se la query viene eseguita in un server di rete.However, the server name is returned as the four-part name when the query is executed on a network server.

Ad esempio, si consideri la query seguente:For example, consider this query:

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

Se ServerName è un server locale, il risultato restituito dalla query è il seguente:When ServerName is a local server, the query returns the following:

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

Se ServerName è un server di rete, il risultato restituito dalla query è il seguente:When ServerName is a network server, the query returns the following:

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

È possibile evitare questa ambiguità specificando l'alias seguente:This potential ambiguity can be avoided by specifying this alias:

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

Di seguito è riportato il risultato della query:This query returns the following:

<x LastName="Achong"/>  

Vedere ancheSee Also

Sintassi di base della clausola FOR XML Basic Syntax of the FOR XML Clause
Utilizzo della modalità RAW con FOR XML Use RAW Mode with FOR XML
Usare la modalità AUTO con FOR XML Use AUTO Mode with FOR XML
Usare la modalità EXPLICIT con FOR XML Use EXPLICIT Mode with FOR XML
Utilizzare la modalità PATH con FOR XML Use PATH Mode with FOR XML
OPENXML (SQL Server) OPENXML (SQL Server)
Aggiungere spazi dei nomi alle query con WITH XMLNAMESPACES Add Namespaces to Queries with WITH XMLNAMESPACES