gpt4 book ai didi

sql-server - 在sql server中读取XML重复标签

转载 作者:数据小太阳 更新时间:2023-10-29 02:26:14 25 4
gpt4 key购买 nike

 Declare @MainXml XML = 
'<?xml version="1.0" encoding="utf-8"?>
<result>
<cash number="10">
<account amt="11.00" status="Closed"/>
<account amt="12.00" status="Closed"/>
</cash>
<cash number="20">
<account amt="21.00" status="Closed"/>
<account amt="22.00" status="Closed"/>
</cash>
</result>'

我正在使用以下查询读取数据

Declare @Innerxml xml; 
SELECT @Innerxml = T.c.query('<result>{/result/cash}</result>')
FROM @MainXml.nodes('result') T(c)

SELECT
Result.Claim.value('(./@number)[1]','varchar(max)') as C1,
Result.Claim.value('(./@amt)[1]','varchar(max)') as C2,
Result.Claim.value('(./@status)[1]','varchar(max)') as C3
From @Innerxml.nodes('/result/cash/account') Result(Claim)

我想读取 xml 并将其存储在数据库中,如下所示。

C1   C2     C3
----------------
10 11.00 Closed
10 12.00 Closed
20 21.00 Closed
20 22.00 Closed

但是我的查询在 C1 列中只返回 NULL请在这里帮助我。提前致谢

最佳答案

您不应在 SQL Server 的 XML 查询中使用父轴。创建的查询计划将是 O(n2)。对于 XML 中的每个节点,检查 XML 中的所有节点。

首先在 result/cash 上切碎,然后在交叉应用中切碎在 account 上。

select C.X.value('@number', 'varchar(max)') as C1,
A.X.value('@amt', 'varchar(max)') as C2,
A.X.value('@status', 'varchar(max)') as C3
from @MainXml.nodes('result/cash') as C(X)
cross apply C.X.nodes('account') as A(X)

<子>我不明白创建第二个 XML 变量的意义。直接使用@MainXML

关于sql-server - 在sql server中读取XML重复标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29812825/

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