从xml列中选择一个值

时间:2009-11-06 14:30:32

标签: xml sql-server-2005

我有一个特别麻烦的xml列来查询数据。该模式由魁北克省税务局确定,因此“它就是它”

查询的重要部分如下所示:

with XMLNAMESPACES(default 'http://www.mrq.gouv.qc.ca/T5')
select xmldata.value('(//Groupe02/*/Montants/B_PrestREER_FERR_RPDB)[1]', 'decimal(16,2)');

Groupe02和Montants之间的通配符可以是A D R或T中的任何一个。(这是正确的一个字母元素名称)

麻烦是我需要查询只选择A,D或R节点而不选择T节点。作为我尝试的第一个猜测:

with XMLNAMESPACES(default 'http://www.mrq.gouv.qc.ca/T5')
select @x.value('(//Groupe02/A|D|R/Montants/B_PrestREER_FERR_RPDB)[1]', 'decimal(16,2)');

但失败了,错误“不支持XQuery语法'union'”

有哪些其他可能的方法可以进行此类查询。

1 个答案:

答案 0 :(得分:3)

我认为使用[name()!='T']可能有用。 E.g。

select @x.value("(//Groupe02/*[name()!='T']/Montants/B_PrestREER_FERR_RPDB)[1]", 'decimal(16,2)');