【发布时间】:2016-09-19 15:15:53
【问题描述】:
有没有一种简单的方法可以在 SQL Server 的 XQuery 算法中使用相对路径?
例如使用下面的代码,我在运算符的两侧重复/a/b/:
declare @x xml = '<a><b><x>10</x><y>20</y></b></a>'
select @x.value('((/a/b/x/text())[1] + (/a/b/y/text())[1])[1]','bigint')
更多信息
注意:我知道在上面的示例中,我可以使用 SUM 函数...遗憾的是,这不适用于我的实际用例,我有多个元素,它们之间要执行各种操作。
我也熟悉 nodes 选项,可以执行以下操作:
select ab.b.value('((./x)[1] + (./y)[1])[1]','bigint')
from @x.nodes('/a/b') ab(b)
当 XML 来自列而不是变量时,我也熟悉使用 outer apply/cross apply 访问此类子查询。这是我目前正在走的路线,但感觉有点笨拙。
我正在设想一个类似的解决方案:
select @x.value('(/a/b[(./x)[1] + (./y)[1]])[1]','bigint');即类似于如何将过滤器应用于当前路径上下文中的多个元素;但还没有找到如何写(假设这是可能的)。
【问题讨论】:
标签: sql-server-2008-r2 xquery xquery-sql