Ho un documento xml digitato memorizzato come testo. Quindi io uso convertire il tipo di dati in XML utilizzando un'espressione di tabella comune, al fine di essere in grado di utilizzare i metodi XML:XML query() funziona, value() richiede singleton trovato xdt: untypedAtomic
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
query funziona, tornando a me l'elemento. Ma mi interessa solo il valore:
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
Questo mi dà il seguente errore:
'value()' requires a singleton (or empty sequence), found operand of type 'xdt:untypedAtomic *'
Cosa Googled dice che il XPATH/XQuery ha bisogno di essere all'interno di parentesi e/o ha bisogno di "[1]" - nessuno dei due ha funzionato. C'è solo un elemento id studente-in xml, anche se immagino che lo schema ne consenta di più?
Inoltre, ci sono numerosi valori di elementi che vorrei recuperare: esiste un modo per dichiarare lo spazio dei nomi una volta piuttosto che per una chiamata di metodo?
Come ho capito '[1]' restituisce solo il primo risultato mentre '.value ('.'' Restituisce tutti i risultati. –