SQLShack

Dans cet article, nous allons montrer comment créer un document de type de données XML à partir d’une table relationnelle en utilisant différentes méthodes T-SQL. Par exemple, pour la migration de données, les informations de la base de données SQL Server peuvent être exportées et importées à l’aide de XML dans un autre framework. XML est un moyen standard d’extraire, de stocker et de manipuler des données. Un aspect de l’utilisation du type de données XML consiste à créer du XML à partir d’informations relationnelles, ce qui est fait à l’aide de la disposition FOR XML dans SQL Server:

 Tableau en document XML

 Table to XML document

Un type de données XML peut être utilisé de manière alternative dans SQL Server. Cet article expliquera certaines utilisations fondamentales de XML. Le mot clé FOR XML est une disposition qui peut être ajoutée avec l’instruction SELECT query pour préparer le document XML dans les formulaires requis dans un résultat de requête. Le résultat est une chaîne Unicode contenant des composants et des qualités contrôlés par les différents modes déterminés dans la disposition avec POUR XML.

Les quatre modes sont:

  • RAW
  • AUTO
  • EXPLICIT
  • PATH

Le tableau ci-dessous présente des exemples de données pour plus de précisions sur les différentes méthodologies:

 exemple de tableau

 exemple de table

Mode AUTOMATIQUE

Le mode AUTOMATIQUE est l’une des approches permettant de convertir les éléments XML à partir des lignes de la table. Noms d’éléments du document XML correspondant à l’alias de colonne ou au nom de colonne de la requête SELECT.

Par exemple, le résultat de la requête a été produit avec un seul document XML pour les données d’exemple ci-dessus. Le résultat de la requête avait 5 lignes dans un ensemble de résultats, qui est remplacé par un ensemble de résultats de cellules solitaires. Cette méthodologie est utilisée dans une fonction à valeur unique pour renvoyer plusieurs lignes dans une seule variable de retour.

1
2
3

SÉLECTIONNEZ user_id, fname, lname, email_
DE user_details
POUR XML AUTO;

 Type de données de tableau en XML

 Type de données Table to XML

Ici, AUTO produit des noms d’en-tête en utilisant des noms de table.

Mode EXPLICITE

Pour plus de contrôle sur le style du XML suivant, les développeurs SQL peuvent utiliser le mode EXPLICITE. Avec le mode EXPLICITE, un résultat de requête sera remplacé par un document de type de données XML unique avec des étiquettes et des valeurs XML personnalisées. Le mode EXPLICITE crée un ensemble d’étiquettes différent pour chaque ligne d’un enregistrement. Même, le mode EXPLICITE permet de concevoir le format XML car l’utilisateur souhaite définir la position des éléments dans le format de type de données XML dans la requête SQL.

Voici un exemple d’utilisation du mode EXPLICITE:

Requête SQL:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

SÉLECTIONNEZ 1 comme balise,
NULL comme parent,
user_id comme,
NULL COMME,
NULL COMME,
NULL COMME
DEPUIS les détails de l’utilisateur
UNION TOUS
SÉLECTIONNEZ 3 comme balise,
1 comme parent,
ID de l’utilisateur as,
fname AS,
lname AS,
email_ AS
À PARTIR DES détails de l’utilisateur
UNION TOUS
SÉLECTIONNEZ 2 comme balise,
1 comme parent,
id de l’utilisateur as,
fname AS,
lname AS,
email_ AS
DE user_details
ORDRE PAR 3, 1
POUR XML EXPLICITE;

Résultat du mode EXPLICITE:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

< utilisateur>
< fname fname = »Jo » />
< lname lname = »Marron » />
</ utilisateur>
< utilisateur>
< fname fname = »Katie » />
< lname lname= »McAskill-Blanc » />
</ utilisateur>
< utilisateur>
< fname fname= »Mihail » />
< lname lname= »Frintu » />
</ utilisateur>
< utilisateur>
< fname fname = »Jimmy » />
< lname lname= »Bischoff » />
</ utilisateur>
< utilisateur>
< fname fname = »Alan » />
< lname lname = »Brasseur » />
</ utilisateur>

 Mode EXPLICITE

 Mode EXPLICITE

Mode RAW

Le mode le plus courant et le plus souvent utilisé par les développeurs pour créer du XML dans FOR XML est le mode RAW. Fondamentalement, le mode RAW génère un élément nommé « ligne » à partir du jeu de résultats pour chaque ligne de l’articulation de SÉLECTION, et la valeur de cellule de la ligne sera délimitée en tant qu’attribut de l’élément. Dans un mode BRUT, chaque colonne sera traitée comme un élément dans le XML, et les colonnes de ces lignes seront attribuées au même élément. Le mode RAW est utilisé pour changer chaque ligne du jeu de résultats en un composant XML.

Pour le mode LIGNE, différents modèles d’interrogation avec différentes sorties expliqués dans les exemples ci-dessous :

Exemple 1

1
2
3
4
5
6
7
8
9

SÉLECTIONNEZ user_id, fname, lname, email_
À PARTIR DE user_details
POUR XML RAW
< ligne user_id= »1″ fname= »Jo » lname= »Brown » email_= »[email protected] » />
< row user_id= »2″ fname= »Katie » lname= »McAskill-White » email_= »[email protected] » />
< la ligne user_id= »3″ fname= »Mihail » lname= »Frintu » email_= »[email protected] » />
< ligne user_id= »4″ fname= »Jimmy » lname= »Bischoff » email_= »[email protected] » />
< row user_id= »5″ fname= »Alan » lname= »Brewer » email_= »[email protected] » />

En mode RAW, l’en-tête de chaque élément est défini comme un élément de ligne dans le résultat XML et les colonnes de chaque ligne sont attribuées à l’intérieur de l’élément de ligne dans le résultat du type de données XML.

Exemple 2

1
2
3
4
5
6
7
8
9
10
11

SÉLECTIONNEZ user_id, fname, lname, email_
À PARTIR DE user_details
POUR XML RAW(‘user’), ROOT
< root>
< user_id= »1″ fname= »Jo » lname= »Brown » email_= »[email protected] » />
< user_id= »2″ fname= »Katie » lname= »McAskill-White » email_= »[email protected] » />
< user_id= »3″ fname= »Mihail » lname= »Frintu » email_= »[email protected] » />
< l’utilisateur user_id= »4″ fname= »Jimmy » lname= »Bischoff » email_= »[email protected] » />
< user_id= »5″ fname= »Alan » lname= »Brewer » email_= »[email protected] » />
</ racine>

Si l’utilisateur souhaite inclure tous les éléments dans une seule balise, l’option ROOT avec le mode RAW peut être utilisée et le nom d’en-tête de chaque élément peut être défini par l’utilisateur en ajoutant un nom avec le RAW() dans le résultat du type de données XML.

Exemple 3

1
2
3
4
5
6
7
8
9
10
11

SÉLECTIONNEZ user_id, fname, lname, email_
À PARTIR DE user_details
POUR XML RAW(‘user’), ROOT(‘UserDetails’)
< Détails de l’utilisateur>
< user_id= »1″ fname= »Jo » lname= »Brown » email_= »[email protected] » />
< user_id= »2″ fname= »Katie » lname= »McAskill-White » email_= »[email protected] » />
< user_id= »3″ fname= »Mihail » lname= »Frintu » email_= »[email protected] » />
< l’utilisateur user_id= »4″ fname= »Jimmy » lname= »Bischoff » email_= »[email protected] » />
< user_id= »5″ fname= »Alan » lname= »Brewer » email_= »[email protected] » />
</ Détails de l’utilisateur>

Dans la RACINE BRUTE XML, l’en-tête peut être conçu avec un nom défini par l’utilisateur avec la RACINE(). Comme on peut le voir dans l’exemple, l’élément < root > est remplacé par l’exemple <UserDetails >

4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

SÉLECTIONNEZ user_id, fname, lname, email_
À PARTIR DE user_details
POUR XML RAW, ÉLÉMENTS
< ligne >
< identifiant de l’utilisateur > 1 < / identifiant de l’utilisateur>
< fname > Jo < / fname>
< lname > Marron < / lname>
< e-mail_>[email protected] < / courriel_>
</ rangée>
< rangée>
< id_utilisateur > 2 < / id_utilisateur>
< fname > Katie < / fname>
< lname > McAskill – Blanc < / lname>
< e-mail_> katie0 @adventure – fonctionne.com< / e-mail_>
</ rangée>

En utilisant la directive ELEMENT avec le mode RAW, l’utilisateur peut créer du XML basé sur une structure d’élément de ligne. Chaque cellule de la ligne est extraite avec des éléments XML à l’intérieur de l’élément parent de la ligne en tant que < ligne >. Fondamentalement, nous avons utilisé le mot clé ELEMENTS dans la requête ci-dessus pour afficher les colonnes en tant qu’éléments dans le XML de sortie.

Mode CHEMIN

Le meilleur mode pour créer du XML avec plus de contrôle sur le format est le mode CHEMIN. À l’aide du CHEMIN, l’utilisateur peut composer des articulations XPATH de SÉLECTION et de fourniture plus simples pour la colonne afin d’attribuer une chaîne de commande. Utilisez FOR XML PATH avec des sous-requêtes pour obtenir le document de type de données XML approprié avec la chaîne d’attributs d’éléments:

1
2
3
4
5
6
7
8
9
10
11

SÉLECTIONNEZ user_id, fname, lname, email_
DE user_details
OÙ email_=’[email protected]
POUR LE CHEMIN XML;
< ligne>
< id_utilisateur > 3 < / id_utilisateur>
< fname > Mihail < / fname>
< nom> Frintu < / nom>
< e-mail_>[email protected] < / courriel_>
</ rangée>

Conclusion

L’utilisation d’un résultat de requête de serveur pour obtenir un format XML différent est simple. Le résultat de la requête sera extrait en XML en incluant un slogan FOR XML à la fin de l’instruction SELECT. Comme discuté, nous avons un certain nombre d’alternatives pour structurer ou organiser le résultat avec des colonnes vers des attributs ou des nœuds XML avec le type de données XML.

  • Auteur
  • Messages récents
 Jignesh Raiyani
Jignesh possède une bonne expérience dans les Solutions et l’Architecture de bases de données, travaillant avec plusieurs clients sur l’Architecture de Conception de bases de données &, le Développement SQL, l’Administration, l’Optimisation des requêtes, le Réglage des Performances, la HA et la Reprise après sinistre.
Voir tous les messages de Jignesh Raiyani

 Jignesh Raiyani
Derniers articles de Jignesh Raiyani (tout voir)
  • Espérance de vie des pages (PLE) dans SQL Server – 17 juillet 2020
  • Comment automatiser le partitionnement de table dans SQL Server – 7 juillet 2020
  • Configuration de groupes de disponibilité SQL Server Toujours disponibles sur AWS EC2 – Juillet 6, 2020

Leave a Reply

Votre adresse e-mail ne sera pas publiée.