在SQL Server XPath表达式中合并变量

时间:2018-08-12 15:30:58

标签: sql-server tsql xpath

我在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表达式的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

因为我们要将路径转移到节点测试中,所以我们将不得不重新安排一些事情。不幸的是,此类查询缺少静态路径的便利。

select xmlData.value('
    sum(
        //*[local-name()=sql:variable("@var1") and data(.)=sql:variable("@var2")]
            /parent::*/*[local-name()=sql:variable("@var3")]
    )', 'float')