`<cassettes>
<cassette>
<cassetteId>A</cassetteId>
<capacity>290</capacity>
<denominations>
<denomination>
<value>1</value>
<currency>US</currency>
<notesAvailable>398</notesAvailable>
<notesToDispense>24</notesToDispense>
<notesDispensed>24</notesDispensed>
<notesDeposited>0</notesDeposited>
<notesSuggested>398</notesSuggested>
</denomination>
</denominations>
<status>0</status>
<position>0</position>
</cassette>...`
以上是xml列值的节选。有关金额的节点是 "notedispensesed".有12个cassetteId's A-K。每个卡带存放一个面额。例如:卡匣A & B包含1s,卡匣C包含5s,卡匣D & E包含10s等等。
下面的select stmt返回cassetteId A的值24,我想避免为每个盒式磁带写出12次。有没有一种方法可以根据面额值返回分配的金额。任何解决方案都非常感激
Select column.value('(/cassettes/cassette/denominations/denomination/notesDispensed)[1]','varchar(max)')
这看起来像你使用sql:variable寻找的东西吗?
DECLARE @iterator = 1
SELECT
Child.value('(/cassettes/cassette/denominations/denomination/notesDispensed)[1]', 'varchar(max)'),
FROM
XMLField.nodes("/cassettes/denomination[sql:variable("@iterator")]/ChildNode") AS N(Child)