一尘不染

XML query()有效,value()要求找到单例xdt:untypedAtomic

sql

我有一个存储为文本的类型化xml文档。因此,为了能够使用XML方法,我通过使用通用表表达式将数据类型转换为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中只有一个Student-
id元素,尽管我猜想该架构还允许更多?

另外,我想检索许多元素值-是否有一种方法可以一次声明名称空间,而不是每个方法调用一次?


阅读 225

收藏
2021-03-10

共1个答案

一尘不染

您需要使用此:

SELECT 
        x.requestpayload.value('declare namespace s="http://blah.ca/api";
            **(** /s:validate-student-request/s:student-id **)[1]** ', 'int') 
    AS
        studentid
    FROM 
        xoutput x

您需要放入XPath( ... ) 并添加,[1]以简单地选择该序列的第一个值。

2021-03-10