'local-name()'需要单例(或空序列)T-SQL Xquery

问题描述 投票:3回答:1

这是这两个问题的变体/组合,但我认为我已经按照他们的描述完成了:

是否有一种方法可以在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

sql sql-server xml tsql
1个回答
0
投票

显然,另外一组括号根据需要为您提供了一个单例:

© www.soinside.com 2019 - 2024. All rights reserved.