这是这两个问题的变体/组合,但我认为我已经按照他们的描述完成了:
是否有一种方法可以在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>
我想要表名(这是BizTalk的“ update-gram”),该表名位于“ after”和ISA06元素之间,在这种情况下为PG204AT5。
在xpathtester.com中测试:local-name(//*[local-name()="after"][1]/* [1])
-由于某种原因,我保存了XPATH:http://www.xpathtester.com/xpath/2bd602d8fc7aee0484de14bf93f71ef2
显然,另外一组括号根据需要为您提供了一个单例: