En alternative à l’article que j’ai donné ici : http://sqlpro.developpez.com/cours/modelisation/metadonnees/
voici un exemple de méta modélisation fait en XML avec MS SQL Server…
PARTIE 1 – LES BASES DU META MODÈLE
1 – La table avec une colonne de méta données XML
(PRS_ID INT IDENTITY PRIMARY KEY,
PRS_NOM CHAR(32) NOT NULL,
PRS_PRENOM_USUEL VARCHAR(25) NOT NULL,
PRS_DATA XML);
GO
2 – les données du test :
VALUES
('DUPONT', 'Marc',
N'
<data>
<date_de_naissance datatype="date">2001-01-12</date_de_naissance>
<sexe datatype="char(5)">homme</sexe>
<date_de_deces datatype="date">2014-07-18</date_de_deces>
</data>'),
('MARTIN', 'Élise',
N'
<data>
<date_de_naissance datatype="date">1988-06-07</date_de_naissance>
<sexe datatype="char(5)">femme</sexe>
<telephone_fixe datatype="varchar(20)">0622441189</telephone_fixe>
</data>');
GO
Deux personnes sont insérées avec des métadonnées différentes.
3 – La requête magique, qui extrait toutes les méta données d’un seul coup avec affichage du type !
Txml.XMLdata.VALUE('fn:local-name(.)', 'NVARCHAR(256)') AS BALISE,
Txml.XMLdata.VALUE('.', 'NVARCHAR(256)') AS VALEUR,
Txml.XMLdata.VALUE('@datatype', 'NVARCHAR(256)') AS TYPE
FROM T_PERSONNE_PRS AS X
OUTER APPLY X.PRS_DATA.nodes('data/*') AS Txml(XMLdata);
Resultat :
-------- ---------- ----------------- ------------------- --------------- ----------
3 DUPONT Marc date_de_naissance 2001-01-12 date
3 DUPONT Marc sexe homme char(5)
3 DUPONT Marc date_de_deces 2014-07-18 date
4 MARTIN Élise date_de_naissance 1988-06-07 date
4 MARTIN Élise sexe femme char(5)
4 MARTIN Élise telephone_fixe 0622441189 varchar(20)
Il ne reste plus qu’Ã :
1) indexer le XML
2) faire de la requête finale une vue
3) implémenter la méthode modify sur le XML si vous voulez le modifier (ajout ou suppression d’un nÅ“ud, ou modification de la valeur dans un nÅ“ud existant).
Expert S.G.B.D relationnelles et langage S.Q.L
Moste Valuable Professionnal Microsoft SQL Server
Société SQLspot : modélisation, conseil, formation,
optimisation, audit, tuning, administration SGBDR
Enseignant: CNAM PACA, ISEN Toulon, CESI Aix en Prov.
L’entreprise SQL Spot
Le site web sur le SQL et les SGBDR
Bonjour,
Il faut écrire .value et non .VALUE dans la requête (« »VALUE » is not a valid function, property, or field. ») :
SELECT X.PRS_ID, PRS_NOM, PRS_PRENOM_USUEL,
Txml.XMLdata.value(‘fn:local-name(.)’, ‘NVARCHAR(256)’) AS BALISE,
Txml.XMLdata.value(‘.’, ‘NVARCHAR(256)’) AS VALEUR,
Txml.XMLdata.value(‘@datatype’, ‘NVARCHAR(256)’) AS TYPE
FROM T_PERSONNE_PRS AS X
OUTER APPLY X.PRS_DATA.nodes(‘data/*’) AS Txml(XMLdata);
Laurent
PS : bravo et mille mercis pour vos articles et tutoriels !!!
Malheureusement l’éditeur de développez est tellement bugué que des choses disparaissent ou sont mise en forme dans d’autres casses ce qui rend invalide les requêtes. J’ai d’ailleurs décidé de quitter DVP…
Cela fait des années que je râle et qu’aucune solution n’est apportée !