Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Une requête SELECT retourne les résultats sous forme d’ensemble de lignes. Vous pouvez éventuellement récupérer des résultats formels d’une requête SQL en tant que XML en spécifiant la clause FOR XML dans la requête. La clause FOR XML peut être utilisée dans les requêtes de niveau supérieur et dans les sous-requêtes. La clause FOR XML de niveau supérieur ne peut être utilisée que dans l’instruction SELECT. Dans les sous-requêtes, FOR XML peut être utilisé dans les instructions INSERT, UPDATE et DELETE. Il peut également être utilisé dans les instructions d’affectation.
Dans une clause FOR XML, vous spécifiez l’un des modes suivants :
CRU
Automobile
EXPLICITE
CHEMIN
Le mode RAW génère un élément de ligne unique <par ligne> dans l’ensemble de lignes retourné par l’instruction SELECT. Vous pouvez générer une hiérarchie XML en écrivant des requêtes FOR XML imbriquées.
Le mode AUTO génère l'imbrication dans l'XML résultant en utilisant des heuristiques selon la manière dont l'instruction SELECT est spécifiée. Vous avez un contrôle minimal sur la forme du code XML généré. Les requêtes FOR XML imbriquées peuvent être écrites pour générer une hiérarchie XML au-delà de la forme XML générée par les heuristiques en mode AUTO.
Le mode EXPLICIT permet un contrôle plus grand sur la forme du code XML. Vous pouvez combiner des attributs et des éléments à la volonté pour décider de la forme du code XML. Elle nécessite un format spécifique pour l’ensemble de lignes résultant qui est généré en raison de l’exécution de la requête. Ce format d’ensemble de lignes est ensuite mappé en forme XML. La puissance du mode EXPLICIT consiste à combiner des attributs et des éléments à la volonté, créer des wrappers et des propriétés complexes imbriquées, créer des valeurs séparées par des espaces (par exemple, l’attribut OrderID peut avoir une liste de valeurs d’ID de commande) et le contenu mixte.
Toutefois, l’écriture de requêtes en mode EXPLICIT peut être fastidieuse. Vous pouvez utiliser certaines des nouvelles fonctionnalités FOR XML, telles que l’écriture de requêtes en mode RAW/AUTO/PATH FOR XML imbriquées et la directive TYPE, au lieu d’utiliser le mode EXPLICIT pour générer les hiérarchies. Les requêtes FOR XML imbriquées peuvent produire n’importe quel code XML que vous pouvez générer à l’aide du mode EXPLICIT. Pour plus d’informations, consultez Utiliser les requêtes FOR XML imbriquées et la directive TYPE dans les requêtes FOR XML.
Le mode PATH avec la fonctionnalité de requête FOR XML imbriquée offre la flexibilité du mode EXPLICIT de manière plus simple.
Ces modes sont en vigueur uniquement pour l’exécution de la requête pour laquelle elles sont définies. Ils n’affectent pas les résultats des requêtes suivantes.
FOR XML n’est pas valide pour toute sélection utilisée avec une clause FOR BROWSE.
Exemple :
L'instruction suivante SELECT récupère des informations à partir des tables Sales.Customer et Sales.SalesOrderHeader dans la base de données AdventureWorks2012. Cette requête spécifie le AUTO mode dans la FOR XML clause :
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
La clause FOR XML et les noms de serveurs
Lorsqu’une instruction SELECT avec une clause FOR XML spécifie un nom en quatre parties dans la requête, le nom du serveur n’est pas retourné dans le document XML résultant lorsque la requête est exécutée sur l’ordinateur local. Toutefois, le nom du serveur est retourné en tant que nom en quatre parties lorsque la requête est exécutée sur un serveur réseau.
Par exemple, considérez cette requête :
SELECT TOP 1 LastName
FROM ServerName.AdventureWorks2012.Person.Person
FOR XML AUTO
Lorsqu’il ServerName s’agit d’un serveur local, la requête retourne les éléments suivants :
<AdventureWorks2012.Person.Person LastName="Achong" />
Lorsqu’il ServerName s’agit d’un serveur réseau, la requête retourne les éléments suivants :
<ServerName.AdventureWorks2012.Person.Person LastName="Achong" />
Cette ambiguïté potentielle peut être évitée en spécifiant cet alias :
SELECT TOP 1 LastName
FROM ServerName.AdventureWorks2012.Person.Person x
FOR XML AUTO
Cette requête retourne les éléments suivants :
<x LastName="Achong"/>
Voir aussi
Syntaxe de base de la clause FOR XML
Utiliser le mode RAW avec FOR XML
Utiliser le mode AUTO avec FOR XML
Utiliser le mode EXPLICIT avec FOR XML
Utiliser le mode PATH avec FOR XML
OPENXML (SQL Server)
Ajouter des espaces de noms aux requêtes avec WITH XMLNAMESPACES