使用条件在 T-SQL 中搜索 XML
Searching through XML in T-SQL with conditions
我正在尝试根据条件将 XML 数据类型的正确信息转换为常规标量变量,但是我无法取回正确的信息。
这是我正在搜索的XML:
<Loop2420>
<NM1>
<F98_1>PW</F98_1>
<F1065>2</F1065>
</NM1>
<N3>
<F166>81715 DOCTOR CARRE</F166>
</N3>
<N4>
<F19>INDIO</F19>
<F156>CA</F156>
<F116>92201</F116>
</N4>
</Loop2420>
<Loop2420>
<NM1>
<F98_1>45</F98_1>
<F1065>2</F1065>
</NM1>
<N3>
<F166>51250 MECCA AVE</F166>
</N3>
<N4>
<F19>COACHELLA</F19>
<F156>CA</F156>
<F116>92236</F116>
</N4>
</Loop2420>
基本上我需要从 <'F116'> 获取数字,但前提是 <'F98_1'> 等于 'PW'.
我试过:
declare @zip varchar(30)
select @zip = T.value('(F116)[1]','varchar(30)')
from @TransactionXML.nodes('/Loop2420/N4') Trans(T)
where T.value('(/Loop2420/NM1/F98_1)[1]','varchar(30)') = 'PW'
但有时 returns 来自 <'F116'> 的值,即使 <'F98_1'> 等于“45”。
有什么建议吗?谢谢
将测试放入 XQuery 本身并将其固定到您正在检查的节点:
SELECT @zip = T.value('(N4/F116)[1]', 'varchar(30)')
FROM @TransactionXML.nodes('/Loop2420') Trans(T)
WHERE T.exist('NM1/F98_1[text()="PW"]') = 1
如果 PW
不是静态值,请使用 sql:variable()
或 sql:column()
函数将其合并到查询中。
我正在尝试根据条件将 XML 数据类型的正确信息转换为常规标量变量,但是我无法取回正确的信息。
这是我正在搜索的XML:
<Loop2420>
<NM1>
<F98_1>PW</F98_1>
<F1065>2</F1065>
</NM1>
<N3>
<F166>81715 DOCTOR CARRE</F166>
</N3>
<N4>
<F19>INDIO</F19>
<F156>CA</F156>
<F116>92201</F116>
</N4>
</Loop2420>
<Loop2420>
<NM1>
<F98_1>45</F98_1>
<F1065>2</F1065>
</NM1>
<N3>
<F166>51250 MECCA AVE</F166>
</N3>
<N4>
<F19>COACHELLA</F19>
<F156>CA</F156>
<F116>92236</F116>
</N4>
</Loop2420>
基本上我需要从 <'F116'> 获取数字,但前提是 <'F98_1'> 等于 'PW'.
我试过:
declare @zip varchar(30)
select @zip = T.value('(F116)[1]','varchar(30)')
from @TransactionXML.nodes('/Loop2420/N4') Trans(T)
where T.value('(/Loop2420/NM1/F98_1)[1]','varchar(30)') = 'PW'
但有时 returns 来自 <'F116'> 的值,即使 <'F98_1'> 等于“45”。
有什么建议吗?谢谢
将测试放入 XQuery 本身并将其固定到您正在检查的节点:
SELECT @zip = T.value('(N4/F116)[1]', 'varchar(30)')
FROM @TransactionXML.nodes('/Loop2420') Trans(T)
WHERE T.exist('NM1/F98_1[text()="PW"]') = 1
如果 PW
不是静态值,请使用 sql:variable()
或 sql:column()
函数将其合并到查询中。