我有下面的 XML,我成功地從 cmpD 節點匯出所有值。然而,我遇到的問題是如何提取<bend>出現在適當dtl節點中的相關值。
這是當前產生的結果:
當前結果
cmp cmpAmt cmpCode
B 1 A
C 9 A
G 2 A
F 1 A
F 1 L
這就是我想要得到的結果,但是<bend>在<Dtl>.
有誰知道如何做到這一點?
預期結果
cmp cmpAmt cmpCode bend
B 1 A A
C 9 A A
G 2 A A
F 1 A Z
F 1 L Z
我目前擁有的:
DECLARE @XML XML = '
<Dtl>
<Type>R</Type>
<bend>A</bend>
<cmpD>
<cmp>B</cmp>
<cmpAmt>1</cmpAmt>
<cmpCode>A</cmpCode>
</cmpD>
<cmpD>
<cmp>C</cmp>
<cmpAmt>9</cmpAmt>
<cmpCode>A</cmpCode>
</cmpD>
<cmpD>
<cmp>G</cmp>
<cmpAmt>2</cmpAmt>
<cmpCode>A</cmpCode>
</cmpD>
</Dtl>
<Dtl>
<Type>R</Type>
<bend>Z</bend>
<cmpD>
<cmp>F</cmp>
<cmpAmt>1</cmpAmt>
<cmpCode>A</cmpCode>
</cmpD>
<cmpD>
<cmp>F</cmp>
<cmpAmt>1</cmpAmt>
<cmpCode>L</cmpCode>
</cmpD>
</Dtl>'
和 SQL:
select
b.value('(cmp/text())[1]','nvarchar(max)'),
b.value('(cmpAmt/text())[1]','nvarchar(max)'),
b.value('(cmpCode/text())[1]','nvarchar(max)')
from
@XML.nodes('/Dtl/cmpD') AS A(b)
uj5u.com熱心網友回復:
你可以先切碎的DTL節點,然后哺養到另一個.nodes使用cross apply碎化的cmpD節點:
select
x2.cmpD.value('(cmp/text())[1]','nvarchar(max)'),
x2.cmpD.value('(cmpAmt/text())[1]','nvarchar(max)'),
x2.cmpD.value('(cmpCode/text())[1]','nvarchar(max)'),
x1.dtl.value('(bend/text())[1]','nvarchar(max)')
from
@XML.nodes('/Dtl') x1(dtl)
cross apply x1.dtl.nodes('cmpD') AS x2(cmpD);
資料庫<>小提琴
注二等如何.nodes指的是第一次,也不會使用領先/。
我建議你重新考慮列的型別和長度,他們真的都需要
nvarchar(max)嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/402858.html
標籤:
上一篇:ASP.NET裁剪影像不會裁剪它
