从xml列中选择一个值

从xml列中选择一个值,xml,sql-server-2005,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)'); group02和Montants之间的通配符可以是dr或T中的任意一个(这是正确的单字母元

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

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

with XMLNAMESPACES(default 'http://www.mrq.gouv.qc.ca/T5')
select xmldata.value('(//Groupe02/*/Montants/B_PrestREER_FERR_RPDB)[1]', 'decimal(16,2)');
group02和Montants之间的通配符可以是dr或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”

还有什么其他可能的方法可以进行这样的查询。

我认为使用
[name()!='T']
可能有效。例如

select @x.value("(//Groupe02/*[name()!='T']/Montants/B_PrestREER_FERR_RPDB)[1]", 'decimal(16,2)');
我认为使用
[name()!='T']
可能有效。例如

select @x.value("(//Groupe02/*[name()!='T']/Montants/B_PrestREER_FERR_RPDB)[1]", 'decimal(16,2)');
作为旁白,似乎local-name()是要使用的函数。作为旁白,似乎local-name()是要使用的函数。