J'essaie d'interroger une valeur particulière dans un champ XML. J'ai vu beaucoup d'exemples, mais ils ne semblent pas être ce que je suis à la rechercheSQL Server 2005 - Recherche de valeur dans le champ XML
Supposant mon champ xml est appelé XMLATTRIBUTES et table TableName, et la valeur xml complète est comme ci-dessous:
<Attribute name="First2Digits" value="12" />
<Attribute name="PurchaseXXXUniqueID" value="U4RV123456762MBE79" />
(bien que le champ XML fréquemment aura d'autres attributs, non seulement PurchaseXXXUniqueID)
Si je suis à la recherche d'une valeur spécifique dans le nom de l'attribut PurchaseXXXUniqueID - dire U4RV123456762MBE79 - comment pourrais-je écrire la requête? Je crois que ce serait quelque chose comme:
select *
from TableName
where XMLAttributes.value('(/path/to/tag)[1]', 'varchar(100)') = '5FTZP2QT8Z3E2MAV2D'
... mais il est le chemin/vers/tag que je dois comprendre.
Ou probablement il y a d'autres façons d'obtenir les valeurs que je veux.
Pour résumer - J'ai besoin d'obtenir tous les enregistrements dans une table où la valeur d'un attribut particulier dans le champ xml correspond à une valeur que je vais passer à la requête.
merci pour l'aide! Edit: J'essayais de rendre cela plus simple, mais au cas où cela ferait une différence - en fin de compte, j'aurai une table temporaire d'environ 50 valeurs potentielles pour le champ PurchaseXXXUniqueID. Pour cela, je veux obtenir tous les enregistrements correspondants de la table avec le champ XML.
Cela l'a fait - merci! C'était très lent, cependant. Non que la lenteur des performances soit un problème avec votre requête, c'est juste que ces tables ne sont pas configurées pour les requêtes XML. Si j'avais toute une liste d'identifiants que je veux trouver - les mettrait dans une table temporaire, et les joignant quelque chose comme ça: – Sylvia
sur Nodes.Attr.value ('(@ value) [1]', 'varchar (100) ') = # tempTable.UniqueID ...... – Sylvia
être le moyen de le faire (désolé, le cr/lf a fini par être de nouvelles entrées) – Sylvia