Geneste FOR XML-query's gebruiken
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Het xml- gegevenstype en de TYPE-instructie in FOR XML-query's maken het mogelijk dat de door deze query's geretourneerde XML zowel op de server als op de client wordt verwerkt.
Verwerken met xml-typevariabelen
U kunt het RESULTAAT van de FOR XML-query toewijzen aan een XML--typevariabele of XQuery gebruiken om een query uit te voeren op het resultaat en dat resultaat toewijzen aan een xml- typevariabele voor meer verwerking.
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" />
U kunt de XML die wordt geretourneerd in de variabele, @x
, ook verwerken met behulp van een van de xml- gegevenstypemethoden. U kunt bijvoorbeeld de ProductModelID
kenmerkwaarde ophalen met behulp van de methode value().
DECLARE @i int;
SET @i = (SELECT @x.value('/row[1]/@ProductModelID[1]', 'int'));
SELECT @i;
In het volgende voorbeeld wordt het FOR XML
-queryresultaat geretourneerd als een xml--type, omdat de TYPE
-instructie is opgegeven in de FOR XML
-clausule.
SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=119 or ProductModelID=122
FOR XML RAW, TYPE,ROOT('myRoot');
Dit is het resultaat:
<myRoot>
<row ProductModelID="122" Name="All-Purpose Bike Stand" />
<row ProductModelID="119" Name="Bike Wash" />
</myRoot>
Omdat het resultaat van xml- type is, kunt u een van de xml- gegevenstypemethoden rechtstreeks opgeven op basis van deze XML, zoals wordt weergegeven in de volgende query. In de query wordt de query()-methode (XML-gegevenstype) gebruikt om het eerste <row>
-subelement van het <myRoot>
-element op te halen.
SELECT (SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID=119 or ProductModelID=122
FOR XML RAW, TYPE,ROOT('myRoot')).query('/myRoot[1]/row[1]');
Dit is het resultaat:
<row ProductModelID="122" Name="All-Purpose Bike Stand" />
Binnenste FOR XML-queryresultaten retourneren aan externe query's als exemplaren van het XML-type
U kunt geneste FOR XML
query's schrijven waarbij het resultaat van de binnenste query wordt geretourneerd als een xml- type naar de buitenste query. Bijvoorbeeld:
SELECT Col1,
Col2,
( SELECT Col3, Col4
FROM T2
WHERE T2.Col = T1.Col
...
FOR XML AUTO, TYPE )
FROM T1
WHERE ...
FOR XML AUTO, TYPE;
Let op het volgende uit de vorige query:
De XML die door de binnenste
FOR XML
query wordt gegenereerd, wordt toegevoegd aan de XML die wordt gegenereerd door de buitensteFOR XML
.De binnenste query specificeert de
TYPE
directive. De XML-gegevens die door de binnenste query worden geretourneerd, zijn daarom van xml- type. Als de TYPE-instructie niet is opgegeven, wordt het resultaat van de interneFOR XML
query geretourneerd als nvarchar(max) en de XML-gegevens zijn geëntitiseerd.
De vorm van resulterende XML-gegevens beheren
Geneste FOR XML-query's bieden meer controle over het definiëren van de vorm van de resulterende XML-gegevens. U kunt geneste FOR XML-query's gebruiken om XML te maken die deels kenmerkgericht en deels elementgericht is.
Zie voor meer informatie over het specificeren van zowel kenmerkgerichte als elementgerichte XML met geneste FOR XML-query's, FOR XML-query vergeleken met geneste FOR XML-query's en Shape XML met geneste FOR XML-query's.
U kunt XML-hiërarchieën genereren die broers en zussen bevatten door geneste AUTO-modus VOOR XML-query's op te geven. Zie Genereer broers en zussen met een geneste automodusqueryvoor meer informatie.
Ongeacht de modus die u gebruikt, bieden geneste FOR XML-query's meer controle bij het beschrijven van de vorm van de resulterende XML. Ze kunnen worden gebruikt in de plaats van modusquery's zoals EXPLICIET.
Voorbeelden
De volgende onderwerpen bevatten voorbeelden van geneste FOR XML-query's.
FOR XML-query vergeleken met geneste FOR XML-query
Vergelijkt een FOR XML-query met één niveau met een geneste FOR XML-query. Dit voorbeeld bevat een demonstratie van het opgeven van zowel kenmerkgericht als elementgericht XML als resultaat van de query.Genereer broers en zussen met een geneste automodusquery
Laat zien hoe u broers en zussen genereert met behulp van een geneste AUTO-modusqueryGeneste FOR XML-queries gebruiken in ASP.NET
Demonstreert hoe een ASPX-toepassing FOR XML kan gebruiken om XML te retourneren van SQL Server.Vormgeven van XML met Geneste FOR XML-query’s
Laat zien hoe u geneste FOR XML-query's gebruikt om de structuur van een XML-document te beheren dat is gemaakt door SQL Server.