Condividi tramite


FOR XML (SQL Server)

Una query SELECT restituisce i risultati come set di righe. Facoltativamente, è possibile recuperare i risultati formali di una query SQL come XML specificando la clausola FOR XML nella query. La clausola FOR XML può essere usata nelle query di primo livello e nelle sottoquery. La clausola FOR XML di primo livello può essere utilizzata solo nell'istruzione SELECT. Nelle query secondarie è possibile usare FOR XML nelle istruzioni INSERT, UPDATE e DELETE. Può essere usato anche nelle istruzioni di assegnazione.

In una clausola FOR XML specificare una di queste modalità:

  • CRUDO

  • AUTOMATICO

  • ESPLICITO

  • SENTIERO

La modalità RAW genera un singolo <elemento riga per riga> nel set di righe restituito dall'istruzione SELECT. È possibile generare una gerarchia XML scrivendo query FOR XML annidate.

La modalità AUTO genera l'annidamento nel codice XML risultante usando euristica in base alla modalità di specifica dell'istruzione SELECT. Si ha un controllo minimo sulla forma del codice XML generato. Le query FOR XML annidate possono essere scritte per generare una gerarchia XML oltre la forma XML generata dall'euristica in modalità AUTO.

La modalità EXPLICIT consente un maggiore controllo sulla forma del codice XML. È possibile combinare attributi e elementi in modo da decidere la forma del codice XML. Richiede un formato specifico per il set di righe risultante generato a causa dell'esecuzione della query. Questo formato di set di righe viene quindi mappato alla forma XML. La potenza della modalità EXPLICIT consiste nel combinare attributi e elementi a volontà, creare wrapper e proprietà complesse annidate, creare valori separati da spazi (ad esempio, l'attributo OrderID può avere un elenco di valori ID ordine) e contenuti misti.

Tuttavia, la scrittura di query in modalità EXPLICIT può essere complessa. È possibile usare alcune delle nuove funzionalità FOR XML, ad esempio la scrittura di query in modalità FOR XML RAW/AUTO/PATH annidate e la direttiva TYPE, anziché usare la modalità EXPLICIT per generare le gerarchie. Le query FOR XML nidificate possono produrre qualsiasi xml che è possibile generare utilizzando la modalità EXPLICIT. Per altre informazioni, vedere Usare query FOR XML annidate e Direttiva TYPE nelle query FOR XML.

La modalità PATH insieme alla funzionalità di query FOR XML annidata offre la flessibilità della modalità EXPLICIT in modo più semplice.

Queste modalità sono effettive solo per l'esecuzione della query per cui sono impostate. Non influiscono sui risultati delle query successive.

FOR XML non è valido per qualsiasi selezione utilizzata con una clausola FOR BROWSE.

Esempio

L'istruzione seguente SELECT recupera informazioni dalle tabelle Sales.Customer e Sales.SalesOrderHeader nel database AdventureWorks2012. Questa query specifica la AUTO modalità nella FOR XML clausola :

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 del server

Quando 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. Tuttavia, il nome del server viene restituito come nome in quattro parti quando la query viene eseguita in un server di rete.

Si consideri ad esempio questa query:

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

Quando ServerName è un server locale, la query restituisce quanto segue:

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

Quando ServerName è un server di rete, la query restituisce quanto segue:

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

Questa potenziale ambiguità può essere evitata specificando questo alias:

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

Questa query restituisce quanto segue:

<x LastName="Achong"/>  

Vedere anche

Sintassi di base della clausola FOR XML
Utilizzo della modalità RAW con FOR XML
Usare la modalità AUTO con FOR XML
Utilizzo della modalità EXPLICIT con FOR XML
Utilizzare la modalità PATH con FOR XML
OPENXML (SQL Server)
Aggiungere spazi dei nomi alle query con WITH XMLNAMESPACES