将变量插值到XML节点搜索中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将变量插值到XML节点搜索中相关的知识,希望对你有一定的参考价值。
我正在尝试将变量插入XML节点查询中,但是我不了解语法。
这是我尝试过的:
declare @LineNumber int
select @LineNumber = 4
select T.value('(N4/F116)[1]','varchar(30)')
from @ClaimXML.nodes('/Envelope/Interchange/Group/Message/Loop2000/Loop2300/Loop2400[LX/F554=@LineNumber]/Loop2420') Trans(T)
where T.exist('NM1/F98_1[text()="PW"]') = 1
上面的查询不起作用,但是如果我手动插入'4'而不是@LineNumber,它将起作用。如何正确插入@LineNumber标量?
答案
只需在评论中添加到解决方案中,这是一个测试此示例:
DECLARE @xml XML=
'<root>
<a id="1" value="a1"/>
<a id="2" value="a2"/>
<a id="3" value="a3"/>
<a id="4" value="a4"/>
<a id="5" value="a5"/>
<a id="6" value="a6"/>
</root>';
-我们可以使用sql:variable()
将外部变量的值输入XPath:
DECLARE @SomeVariable INT=3;
SELECT @xml.value('(/root/a[@id=sql:variable("@SomeVariable")]/@value)[1]','char(2)')
--result: "a3"
-我们可以使用sql:column()
来使用(当前行的)列的值来执行相同的操作:
DECLARE @tbl TABLE(SomeColumn INT);
INSERT INTO @tbl VALUES(1),(3),(6);
SELECT t.SomeColumn
,@xml.value('(/root/a[@id=sql:column("SomeColumn")]/@value)[1]','char(2)')
FROM @tbl t;
结果
1 a1
3 a3
6 a6
以上是关于将变量插值到XML节点搜索中的主要内容,如果未能解决你的问题,请参考以下文章
VSCODE 查找在文件夹或者文件中代码或定义,在文件夹中查找文件的多种方法