【发布时间】:2020-05-11 06:58:36
【问题描述】:
这是这两个问题的变体/组合,但我想我已经按照他们的描述做了:
- Getting element's name in XPATH
- XQuery [value()]: 'value()' requires a singleton (or empty sequence), found operand of type 'xdt:untypedAtomic *'
有没有办法在 SQL Server 2016 T-SQL 查询中获取节点的名称?
我想这样做:
select
trcid,
trcXML.value(
'local-name(//*[local-name()="after"][1]/*[1])',
'varchar(32)'
) as XmlTableName,
trcXml,
trcGUID,
trcCorrID
from trace
order by trcId desc
我已在层次结构中的每个项目之后明确包含[1]。
错误:XQuery [trace.trcXML.value()]: 'local-name()' 需要一个单例(或空序列),找到
'element(*,xdt:untyped) *'类型的操作数
样本数据:
<s1:DB2Request xmlns:s1="XYZDB2">
<s1:sync>
<s1:after identityInsert="false">
<s1:PG204AT5>
<s1:ISA06>1975111</s1:ISA06>
etc...
</s1:PG204AT5>
</s1:after>
</s1:sync>
</s1:DB2Request>
我想要位于“after”和 ISA06 元素之间的表名(这是一个 BizTalk“update-gram”),在本例中为:PG204AT5。
在 xpathtester.com 中测试:local-name(//*[local-name()="after"][1]/* [1])
- 出于某种原因,当我保存它时,XPATH 发生了变化:http://www.xpathtester.com/xpath/2bd602d8fc7aee0484de14bf93f71ef2
【问题讨论】:
-
Node 是什么意思?是服务器名称吗? SELECT @@servername AS '服务器名' ,@@servicename AS '实例名' ,DB_NAME() AS '数据库名' ,HOST_NAME() AS '主机名'
标签: sql sql-server xml tsql