J'ai tapé un document xml stockés en tant que texte. J'utilise donc CONVERTIR le type de données xml à l'aide d'une Expression de Table Commune afin d'être en mesure d'utiliser XML méthodes:
WITH xoutput AS (
SELECT CONVERT(xml, t.requestpayload) 'requestpayload'
FROM TABLE t
WHERE t.methodid = 1)
SELECT x.requestpayload.query('declare namespace s="http://blah.ca/api";/s:validate-student-request/s:student-id') as studentid
FROM xoutput x
Requête fonctionne, en revenant à moi l'élément. Mais je suis seulement intéressé par la valeur:
WITH xoutput AS (
SELECT CONVERT(xml, t.requestpayload) 'requestpayload'
FROM TABLE t
WHERE t.methodid = 1)
SELECT x.requestpayload.value('declare namespace s="http://blah.ca/api";/s:validate-student-request/s:student-id', 'int') as studentid
FROM xoutput x
Cela me donne l'erreur suivante:
valeur de()' requiert un singleton (ou séquence vide), trouvé opérande de type 'xdt:untypedAtomic *'
Ce que j'ai googlé dit que le XPATH/XQUERY doit être à l'intérieur des parenthèses et/ou des besoins "[1]" - ni a travaillé. Il n'y a qu'un seul étudiant-id de l'élément dans le fichier xml, mais je suppose que le schéma permet de mieux?
En outre, il existe de nombreuses valeurs d'élément que j'aimerais récupérer existe - il un moyen de déclarer l'espace de noms une fois plutôt que par appel de méthode?