gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 20:23:26 25 4
gpt4 key购买 nike

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

有没有办法在 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]

Error: XQuery [trace.trcXML.value()]: 'local-name()' requires a singleton (or empty sequence), found operand of type '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

最佳答案

再多一组括号就可以根据需要提供一个单例:

DECLARE @t TABLE(s XML);
INSERT INTO @t(s)VALUES(N'<s1:DB2Request xmlns:s1="XYZDB2">
<s1:sync>
<s1:after identityInsert="false">
<s1:PG204AT5>
<s1:ISA06>1975111</s1:ISA06>
<somethingsomething/>
</s1:PG204AT5>
</s1:after>
</s1:sync>
</s1:DB2Request>');

select
s.value(
'local-name((//*[local-name()="after"][1]/*)[1])',
'varchar(32)'
) as XmlTableName
from @t;

结果:

XmlTableName
PG204AT5

关于sql - 'local-name()' 需要单例(或空序列)T-SQL Xquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59905080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com