L'instruction SELECT dispose de l'option FOR XML qui permet de mettre au format XML les données issues de la requête. L'option FOR XML peut être utilisée dans les 4 modes suivants:
Avec cette option chaque ligne de résultat est un élément de type row (ligne) qui possède comme attribut les colonnes retournées par la requête.
Il est toutefois possible d'influer sur cette mise en forme par défaut en ajoutant la directive ELEMENTS (for xml raw,elements). Ainsi les valeurs issues des différentes colonnes ne sont elles plus présentées comme des attributs de la balise row mais plutot comme la valeur de sous éléments de RAW.

L'option TYPE permet quand à elle de récupérer les valeurs directement au format xml. Les données à ce format peuvent alors être enregistrées directement dans une colonne au format xml.
Enfin avec l'option XMLSCHEMA il est possible de récupérer directement un fichier XSD de description de la structure des données au format XML.
Cette option est sans aucun doute la plus connue car c'est aussi la plus facile d'accès. Les données vont être retournées sur un ou plusieurs niveau en respectant la hiérarchie des données. Cependant dans le cas ou la structure est complexe, il est préférable d'utiliser l'option EXPLICIT. Cependant pour des requêtes simples le résultat est très pratique.


Avec ce mode il est possible de contrôler et de structurer comme on le souhaite le document de sortie. Cependant avec le mode explicit, toutes les informations relatives à la structuration XML du résultat doivent être intégrée à la requête SELECT, cette contrainte pèse sur FOR XML EXPLICIT aussi l'option FOR XML PATH peut elle donner un résultat satisfaisant dans de nombreux cas avec l'avantage de conserver une requête d'extraction des données plus simple à écrire.
Pour afficher les informations au format XML, l'option EXPLICIT se base sur les 2 premières colonnes de la requête qui sont Tag et Parent. La colonne Tag contient le numéro (sous forme de valeur entière) de la balise tandis que la colonne Parent contient le numéro de la balise parent. Ces 2 premières colonnes permettent de mettre en place la structure hiérarchique du document XML.
En plus de cette contrainte portant sur les 2 premières colonnes de la requête, le nom des autres colonnes est structuré de façon à pouvoir former correctement le document XML. Le nom des colonnes va permettre de spécifier le nom des balises, des attributs.
Cette ensemble de contraintes sur la struture du résultat peut rendre la requête SQL parfois complexe à écrire mais offre l'avantage de maitriser complètement le format du résultat.
Le nom des colonnes doit respecter la structure suivante nomBalise! numeroBalise!nomatribut!directive avec la signification suivante
L'exemple suivant permet de fournir au format xml le nom des différentes, les colonnes et leur type de données.

Le résultat est alors le suivant

Le mode PATH à pour objectif de combiner les modes auto, dans lequel ne nombre de réglages est limité avec le mode explicit, qui est très complet mais également relativement lourd à utiliser. Le mode PATH utilise la nom de colonnes pour établir la structure des documents. Le nom des colonnes doivent utiliser les caractères @ et / pour préciser que la colonne va structurer une balise ou bien un attribut.
L'exemple suivant illustre les possibilités offertes par cette instruction.
