Générer du code XML à partir d’ensembles de lignes avec FOR XML

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Vous pouvez générer une instance de type xml à partir d’un ensemble de lignes en utilisant FOR XML avec la nouvelle directive TYPE .

Le résultat peut être assigné à une colonne, une variable ou un paramètre de type xml . De plus, il est possible d'imbriquer des clauses FOR XML pour générer une structure hiérarchique. Les clauses FOR XML imbriquées sont plus faciles à écrire que la clause FOR XML EXPLICIT, mais elles ne s'avèrent pas aussi performantes pour les hiérarchies profondes. FOR XML introduit aussi un nouveau mode PATH qui spécifie le chemin de l'arborescence XML où apparaît la valeur d'une colonne.

La nouvelle directive FOR XML TYPE permet de créer, avec une syntaxe SQL, des vues XML en lecture seule des données relationnelles. La vue peut être interrogée par des instructions SQL et le langage XQuery intégré, comme le montre l'exemple suivant. Vous pouvez également faire référence à ces vues SQL dans les procédures stockées.

Exemple : vue SQL retournant le type de données xml généré

La définition de la vue SQL suivante crée une vue XML d'une colonne relationnelle, pk, et extrait les auteurs des livres d'une colonne XML :

CREATE VIEW V (xmlVal) AS
SELECT pk, xCol.query('/book/author')
FROM   T
FOR XML AUTO, TYPE;

La vue V contient une seule ligne avec une seule colonne columnxmlVal de type XML. Elle peut faire l’objet d’une requête comme tout autre instance standard de type xml . Par exemple, la requête suivante renvoie l'auteur dont le prénom est « David » :

SELECT xmlVal.query('//author[first-name = "David"]')
FROM   V;

Les définitions de vues SQL sont similaires aux vues XML créées à l’aide de schémas annotés. bien qu'il y ait des différences de taille. La définition d'une vue SQL est en lecture seule et doit être manipulée avec le langage XQuery intégré. Les vues XML sont créées à l'aide d'un schéma annoté. De plus, la vue SQL matérialise le résultat XML avant l'application de l'expression XQuery tandis que les requêtes XPath sur les vues XML évaluent les requêtes SQL portant sur les tables sous-jacentes.

Voir aussi