我在SQL Server上具有以下表达式,可以正常工作:
xmlData.value('sum(//*[variable1="222"]/./variable3)', 'float')
我想重写它,使其包含以下三个变量:
declare @var1 nvarchar(max) = 'variable1'
declare @var2 int = 222
declare @var3 nvarchar(max) = 'variable3'
以下是与我的问题有关的xml:
<main>
<TAL>
<variable1>222</variable1>
<Name>someName1</Name>
<a>2</a>
<b>73</b>
<variable3>1</variable3>
</TAL>
<TAL>
<variable1>333</variable1>
<Name>someName2</Name>
<a>4</a>
<b>56</b>
<variable3>2</variable3>
</TAL>
</main>
我尝试了几种选择,例如:
xmlData.value('sum(//*[local-name()=sql:variable("@var1")="local-name()=sql:variable("@var2")"]/./local-name()=sql:variable("@var3"))', 'float')
但没有成功。使用变量编写XPath表达式的正确方法是什么?
答案 0 :(得分:1)
因为我们要将路径转移到节点测试中,所以我们将不得不重新安排一些事情。不幸的是,此类查询缺少静态路径的便利。
select xmlData.value('
sum(
//*[local-name()=sql:variable("@var1") and data(.)=sql:variable("@var2")]
/parent::*/*[local-name()=sql:variable("@var3")]
)', 'float')