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

Это дает мне следующую ошибку:

'value ()' требует одноэлементного (или пустой последовательности) найденного операнда типа 'xdt: untypedAtomic *'

То, что я гуглил, говорит о том, что XPATH / XQUERY должен быть в скобках и / или нуждаться в «[1]» - ни один из них не сработал. В xml есть только один элемент студенческого идентификатора, хотя я предполагаю, что схема допускает больше?

Кроме того, есть множество значений элементов, которые я бы хотел получить - есть ли способ объявить пространство имен один раз, а не для вызова метода?

Ответы на вопрос(3)

Ваш ответ на вопрос