Mam zapisany dokument xml zapisany jako tekst. Więc używam przekonwertować typ danych XML za pomocą wyrażenia tabelowego aby móc korzystać z metod XML:Funkcja zapytania XML() działa, wartość() wymaga pojedynczego znalezienia 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
Zapytanie działa, wracając do mnie element. Ale jestem zainteresowany tylko wartości:
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
To daje mi następujący błąd:
'value()' requires a singleton (or empty sequence), found operand of type 'xdt:untypedAtomic *'
Co mam google mówi, że XPATH/XQuery musi być wewnątrz nawiasu i/lub potrzeby "[1]" - żadna nie zadziałała. W pliku xml znajduje się tylko jeden element identyfikatora ucznia, choć sądzę, że schemat pozwala na więcej?
Dodatkowo istnieje wiele wartości elementów, które chciałbym odzyskać - czy istnieje sposób na zadeklarowanie przestrzeni nazw zamiast wywołania metody?
Jak rozumiem, "[1]" zwraca tylko pierwszy wynik, podczas gdy '.value (". "Zwraca wszystkie wyniki. –