sql-server - 将变量插入 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
推荐阅读
- file - 如何与 WhatsApp 用户共享在 Kottlin 应用程序中创建的文本文件?
- azure-devops - 在 Azure Devops 中使用 git-crypt
- javascript - 处理反应组件中的 n 个复选框
- python - 关于python中元组的“不变性”
- asdf-vm - 即使安装了 asdf 命令也不起作用
- python - 用漂亮的汤用文本查找标签时跳过前导和尾随空格
- python - Python列表对齐
- reactjs - 上传文件时代理状态而不是文件
- python - 如何在 Spyder 中使用快捷方式进行评论
- python - 有没有更好的方法来解析 python 字典?