Utilizzo di query FOR XML nidificate
Si applica a:SQL Server
Database SQL di Azure
Istanza gestita di SQL di Azure
Il tipo di dati xml e la direttiva TYPE nelle query FOR XML abilitano l'elaborazione dell'XML restituito dalle query FOR XML sia sul server che sul client.
Elaborazione con variabili di tipo xml
È possibile assegnare il risultato di una query FOR XML a una variabile di tipo xml oppure usare XQuery per eseguire query sul risultato e quindi assegnare tale risultato a una variabile di tipo xml per un'ulteriore elaborazione.
DECLARE @x xml
SET @x=(SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=122 or ProductModelID=119
FOR XML RAW, TYPE)
SELECT @x
-- Result
--<row ProductModelID="122" Name="All-Purpose Bike Stand" />
--<row ProductModelID="119" Name="Bike Wash" />
Il valore XML restituito nella variabile @x
può essere ulteriormente elaborato usando uno dei metodi con tipo di dati xml . Ad esempio, è possibile recuperare il valore dell'attributo ProductModelID
usando il metodo value().
DECLARE @i int;
SET @i = (SELECT @x.value('/row[1]/@ProductModelID[1]', 'int'));
SELECT @i;
Nell'esempio seguente, il risultato della query FOR XML
viene restituito come tipo xml a causa della direttiva TYPE
specificata nella clausola FOR XML
.
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=119 or ProductModelID=122
FOR XML RAW, TYPE,ROOT('myRoot');
Risultato:
<myRoot>
<row ProductModelID="122" Name="All-Purpose Bike Stand" />
<row ProductModelID="119" Name="Bike Wash" />
</myRoot>
Poiché il risultato è di tipo xml , è possibile applicare uno dei metodi con tipo di dati xml direttamente al valore XML, come illustrato nella query seguente. Nella query viene usato il metodo query() con tipo di dati xml per recuperare il primo elemento figlio <row>
dell'elemento <myRoot>
.
SELECT (SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=119 or ProductModelID=122
FOR XML RAW, TYPE,ROOT('myRoot')).query('/myRoot[1]/row[1]');
Risultato:
<row ProductModelID="122" Name="All-Purpose Bike Stand" />
Restituire i risultati delle query FOR XML interne a quelle esterne come istanze del tipo xml
È possibile scrivere query FOR XML
nidificate in cui il risultato della query interna viene restituito come tipo xml alla query esterna. Ad esempio:
SELECT Col1,
Col2,
( SELECT Col3, Col4
FROM T2
WHERE T2.Col = T1.Col
...
FOR XML AUTO, TYPE )
FROM T1
WHERE ...
FOR XML AUTO, TYPE;
Dalla query precedente si noti quanto segue:
Il valore XML generato dalla query
FOR XML
interna viene aggiunto al valore XML generato dalla queryFOR XML
esterna.Nella query interna viene specificata la direttiva
TYPE
. I dati restituiti dalla query interna sono quindi di tipo xml . Se non si specifica la direttiva TYPE, il risultato della queryFOR XML
interna viene restituito come nvarchar(max) e i dati XML vengono convertiti in entità.
Controllo della forma dei dati XML risultanti
Le query FOR XML nidificate consentono di avere un maggior controllo nella definizione della forma dei dati XML risultanti. È possibile utilizzare query FOR XML nidificate per costruire XML che sia parzialmente incentrato sugli attributi e parzialmente sugli elementi.
Per ulteriori informazioni su come specificare XML incentrato sia sugli attributi sia sugli elementi con query FOR XML nidificate, vedere Query FOR XML e query nidificata FOR XML a confronto e Strutturare XML con query nidificate FOR XML.
È possibile generare gerarchie XML che includono elementi di pari livello eseguendo query FOR XML nidificate in modalità AUTO. Per altre informazioni, vedere Generare fratelli tramite query nidificate in modalità AUTO.
Indipendentemente dalla modalità utilizzata, le query FOR XML nidificate offrono un maggior controllo nella descrizione della struttura dell'XML risultante. e possono essere utilizzate in sostituzione delle query in modalità EXPLICIT.
Esempi
Negli argomenti seguenti vengono forniti esempi di query FOR XML nidificate.
Confronto tra Query FOR XML e Query FOR XML annidate
Confronta una query FOR XML a un unico livello con una query FOR XML nidificata. In questo esempio è inclusa una dimostrazione di come specificare valori XML incentrati sia sugli attributi sia sugli elementi come risultato della query.Generare elementi di pari livello tramite query annidate in modalità AUTO
Come generare nodi correlati utilizzando una query nidificata in modalità AUTOUsare le query annidate FOR XML in ASP.NET
Dimostrazione del modo in cui un'applicazione ASPX può utilizzare FOR XML per restituire XML da SQL Server.Determinare la struttura dei valori XML tramite query FOR XML annidate
Mostra come utilizzare query FOR XML nidificate per controllare la struttura di un documento XML creato da SQL Server.