XQuery e SQL 2008 - la clausola LET

Con Sql Server 2005 è stato introdotto il tipo di dati xml. Uno dei metodi per fare query all'interno di un documento xml è usare un sottoinsieme delle possibilità offerte da XQuery tramite il linguaggio T-SQL. Oltre alle clausole for, where, order by e return delle cosiddette espressioni FLWOR,

Sql Server 2008 supporta anche  la clausola let, che permette di assegnare un valore ad una variabile all'interno di una espressione XQuery. Ecco un esempio :

-- dichiarazione e valorizzazione della variabile
declare @x xml
set @x=
'<Fatture>
<Fattura>
<Cliente>Mario Rossi</Cliente>
<Prodotti>
<Prodotto IDProdotto="2" Prezzo="1.99" Quantita="1" />
<Prodotto IDProdotto="3" Prezzo="2.99" Quantita="2" />
<Prodotto IDProdotto="5" Prezzo="1.99" Quantita="1" />
</Prodotti>
</Fattura>
<Fattura>
<Cliente>Andrea Bianchi</Cliente>
<Prodotti>
<Prodotto IDProdotto="2" Prezzo="1.99" Quantita="1"/>
</Prodotti>
</Fattura>
</Fatture>'

--XQuery

SELECT @x.query(
'<Ordini>
{
for $Fattura in /Fatture/Fattura
let $count :=count($Fattura/Prodotti/Prodotto)
order by $count
return
<Ordine>
{$Fattura/Cliente}
<Conteggio>{$count}</Conteggio>
</Ordine>
}
</Ordini>')

 

--output della query

<Ordini>
  <Ordine>
    <Cliente>Andrea Bianchi</Cliente>
   <Conteggio>1</Conteggio>
  </Ordine>
  <Ordine>
    <Cliente>Mario Rossi</Cliente>
    <Conteggio>3</Conteggio>
  </Ordine>
</Ordini>