Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将变量插入到XML节点搜索中_Sql Server_Xml_Tsql - Fatal编程技术网

Sql server 将变量插入到XML节点搜索中

Sql server 将变量插入到XML节点搜索中,sql-server,xml,tsql,Sql Server,Xml,Tsql,我试图在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') T

我试图在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: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
sql:变量(“@LineNumber”):
1   a1
3   a3
6   a6