Sql server 在SQL Server XPath表达式中组合变量
我在SQL Server上有一个表达式,它可以正常工作:Sql server 在SQL Server XPath表达式中组合变量,sql-server,tsql,xpath,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>
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>
但是没有成功。使用变量编写XPath表达式的正确方法是什么?因为我们要将路径移动到节点测试中,所以我们必须重新安排一些内容。不幸的是,这样的查询缺乏静态路径的便利性
select xmlData.value('
sum(
//*[local-name()=sql:variable("@var1") and data(.)=sql:variable("@var2")]
/parent::*/*[local-name()=sql:variable("@var3")]
)', 'float')
嗨,利文特,你能用语言解释一下你想要达到的目标吗?我真的不知道您在问题中的示例xpath查询想要实现什么。感谢TT,我正在搜索一个名为“variable1”的元素及其值。如果它是222,我将得到它的兄弟元素“variable3”的值。问题是我需要将变量作为参数传递给函数,所以表达式需要再次包含它们。通常对于这样的问题,可以方便地包含一些供人们玩弄的示例XML,以及用于验证的示例XPath查询的预期结果。让这里的人更容易从回答你的问题开始。使用问题下方的
edit
链接,“编辑你的问题”始终可以包含这样的示例。根据你的建议,该问题现在包含我的一些xml。谢谢Jeroen,它起作用了!这正是我需要的。非常感谢@livnt只是一个小小的提示:我会使用(text()[1]cast as xs:int?
,而不是数据(.)
,这将启用作为int值的比较,您可以使用/../
而不是/parent::*/
-但这更多是一个品味问题。。。
select xmlData.value('
sum(
//*[local-name()=sql:variable("@var1") and data(.)=sql:variable("@var2")]
/parent::*/*[local-name()=sql:variable("@var3")]
)', 'float')