Je commence tout juste à utiliser XML dans SQL Server 2008. J'ai les données dans XML, mais j'ai du mal à trouver de bons exemples d'interrogation des données. Quelqu'un peut-il m'indiquer un bon endroit pour commencer? Par exemple, je souhaiterais rechercher toutes les lignes du serveur SQL contenant un certain critère dans le XML, comme toutes les lignes dont le XML contient une altitude supérieure à 10 000.
Réponses
Trop de publicités?J'ai vraiment plaisir à Alex d'Homère, l'intro de SQL Server 2005 XQuery et XML DML - Partie 1 (tout à fait qu'une bouchée!) sur codeguru.com. Tout est toujours parfaitement valide dans SQL Server 2008, trop.
Ne pas savoir beaucoup au sujet de votre structure (nous montrer un exemple XML!), vous pouvez essayer d'utiliser une requête comme ceci:
select
(list of fields)
from
MyTable
where
MyXmlField.value('(/root/altitude)[1]', 'int') > 10000
Vous pouvez utiliser le .valeur de la fonction XML pour extraire une valeur donnée de votre champ XML, basé sur une expression XPath (ici: /root/altitude
). Vous devez également définir quel type vous êtes l'espoir d'obtenir de retour (éventuellement sur la base d'un schéma XML), et cela vous donne une valeur de ce type que vous pouvez ensuite utiliser normalement dans n'importe quelle instruction SQL et d'expression.
Marc
Les ateliers XML de Jacob Sebastian sont la norme de référence en matière d'exemples gratuits en ligne d'interrogation SQL XML, ici: http://beyondrelational.com/blogs/jacob/archive/2007/12/20/xml-workshops.aspx
Je pense que cette page de support XML dans Microsoft SQL Server 2005 est votre meilleur endroit pour commencer. cela n'a pas changé pour la version 2008.
Pour des réponses spécifiques, vous devez fournir votre code XML.
En règle générale, vous utiliseriez la méthode .exist () si vous souhaitez rechercher des lignes qui correspondent à certains critères XML mais ne doivent pas renvoyer le document XML. Cela permet une utilisation optimisée de l'index XML (si vous en avez créé un), alors que le moteur doit toucher l'instance XML réelle dans la plupart des autres cas.