Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Een SELECT query retourneert resultaten als een rijenset. U kunt eventueel formele resultaten van een SQL-query ophalen als XML door de FOR XML component in de query op te geven. De FOR XML component kan worden gebruikt in query's op het hoogste niveau en in subquery's. De component op het hoogste niveau FOR XML kan alleen in de SELECT instructie worden gebruikt. In subquery's FOR XML kunnen worden gebruikt in de INSERT, UPDATEen DELETE instructies.
FOR XML kan ook worden gebruikt in toewijzingsinstructies.
In een component geeft u een FOR XML van de volgende modi op:
RAWAUTOEXPLICITPATH
De RAW modus genereert één <row> element per rij in de rijenset die wordt geretourneerd door de SELECT instructie. U kunt XML-hiërarchie genereren door geneste query's te FOR XML schrijven.
De AUTO modus genereert nesten in de resulterende XML met behulp van heuristiek op basis van de manier waarop de SELECT instructie wordt opgegeven. U hebt minimale controle over de vorm van de gegenereerde XML. De geneste FOR XML query's kunnen worden geschreven om een XML-hiërarchie te genereren buiten de XML-shape die wordt gegenereerd door AUTO modus-heuristieken.
De EXPLICIT modus biedt meer controle over de vorm van de XML. U kunt kenmerken en elementen tegelijk combineren bij het bepalen van de vorm van de XML. Hiervoor is een specifieke indeling vereist voor de resulterende rijenset die wordt gegenereerd vanwege de uitvoering van query's. Deze rijsetindeling wordt vervolgens toegewezen aan XML-shape. De kracht van de modus bestaat uit het combineren van kenmerken en elementen, het maken van wrappers en geneste complexe eigenschappen, het maken van EXPLICIT door spaties gescheiden waarden (bijvoorbeeld het OrderID kenmerk kan een lijst met order-id-waarden hebben) en gemengde inhoud.
Schrijfmodusquery's EXPLICIT kunnen echter lastig zijn. U kunt enkele van de nieuwe FOR XML mogelijkheden gebruiken, zoals het schrijven van geneste FOR XML RAW, AUTOof PATH modusquery's en de TYPE instructie, in plaats van de modus te gebruiken EXPLICIT om de hiërarchieën te genereren. De geneste FOR XML query's kunnen elke XML produceren die u kunt genereren met behulp van de EXPLICIT modus. Zie Geneste FOR XML-query's en TYPE-instructie gebruiken in FOR XML-query's voor meer informatie.
De PATH modus samen met de geneste FOR XML queryfunctie biedt de flexibiliteit van de EXPLICIT modus op een eenvoudigere manier.
Deze modi zijn alleen van kracht voor de uitvoering van de query waarvoor ze zijn ingesteld. Ze hebben geen invloed op de resultaten van eventuele volgende query's.
FOR XML is niet geldig voor een selectie die wordt gebruikt met een FOR BROWSE component.
Voorbeelden
Met de volgende SELECT instructie worden gegevens opgehaald uit de Sales.Customer en Sales.SalesOrderHeader tabellen in de AdventureWorks2022 database. Met deze query geeft u de AUTO modus in de FOR XML component op:
USE AdventureWorks2022;
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;
De FOR XML-component en servernamen
Wanneer een SELECT instructie met een FOR XML component een vierdelige naam in de query opgeeft, wordt de servernaam niet geretourneerd in het resulterende XML-document wanneer de query wordt uitgevoerd op de lokale computer. De servernaam wordt echter geretourneerd als de vierdelige naam wanneer de query wordt uitgevoerd op een netwerkserver.
Denk bijvoorbeeld aan deze query:
SELECT TOP 1 LastName
FROM ServerName.AdventureWorks2022.Person.Person
FOR XML AUTO;
Lokale server: Wanneer ServerName is een lokale server, retourneert de query de volgende tekst:
<AdventureWorks2022.Person.Person LastName="Achong" />
Netwerkserver: Wanneer ServerName is een netwerkserver, retourneert de query de volgende tekst:
<ServerName.AdventureWorks2022.Person.Person LastName="Achong" />
Dubbelzinnigheid voorkomen: deze mogelijke dubbelzinnigheid kan worden vermeden door deze alias op te geven:
SELECT TOP 1 LastName
FROM ServerName.AdventureWorks2022.Person.Person x
FOR XML AUTO;
De ondubbelzinnige query retourneert nu de volgende tekst:
<x LastName="Achong"/>