从SQL列中提取XML:不能在nvarchar(max)上调用方法。

9

我有一个 SQL 查询,其中在我的列名上返回了错误,说“不能在 nvarchar(max) 上调用方法。”

      SELECT [LEARNER_COURSE_XML_TEST].[XML_EX].Query('declare namespace
      x="http://tempuri.org/cmi.xsd";] (/x:cmi/x:core/x:time_taken)') 
      AS TimeTaken FROM [LEARNER_COURSE_XML_TEST]

问题似乎集中在[XML_EX].value上,但我尝试了一些事情,包括更改列类型,但最终遇到了困难。如果有任何指针,将不胜感激。
2个回答

8

听起来XML_EX的类型是nvarchar(max)。尝试将其更改为xml

您还可以在查询中进行转换,如下所示:

select  cast(lcxt.XML_EX as xml).query(...)
from    learner_course_xml_test lcxt

CAST 必须包含整个列引用,而不仅仅是列名(即 lcxt. 应该在内部)。 - Damien_The_Unbeliever
@Damien_The_Unbeliever:显然没错,随意编辑 ;) - Andomar

1

感谢大家的回复。事实证明,我过于复杂化了它,因为我无法在SQL表中访问我的命名空间。不过,我确实从将字段类型更改为XML开始,所以感谢Andomar。我的解决方案如下:

SELECT [LEARNER_COURSE_XML_TEST].[XML_EX].query('data(sco/cmicore/total_time)') AS  TimeTaken FROM [LEARNER_COURSE_XML_TEST] 

这正如我所希望的那样提取了我的总时间。再次感谢。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接