XML query () работает, value () требует одноэлементного найденного xdt: untypedAtomic
У меня есть напечатанный документ XML, хранящийся в виде текста. Поэтому я использую CONVERT типа данных в xml, используя Common Table Expression, чтобы иметь возможность использовать методы XML:
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
Запрос работает, возвращая мне элемент. Но я'м интересует только значение:
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
Это дает мне следующую ошибку:
значение()' требуется одиночный код (или пустая последовательность), найденный операнд типа 'xdt: untypedAtomic * '
Что я've googled говорит, что XPATH / XQUERY должен быть внутри скобок и / или нужд "[1]» - ни сработало. Там'В XML только один элемент студенческого идентификатора, хотя я предполагаю, что схема допускает больше?
Кроме того, существует множество значений элементов I 'Я хотел бы получить - есть ли способ объявить пространство имен один раз, а не для вызова метода?