Я не уверен, что это именно то, что вам нужно, но похоже, что вы просто хотите, чтобы все элементы для каждого узла Cheque
возвращались в виде столбцов?
Я бы просто установил путьв a.SoapInput_CAST.nodes()
указан явный путь к родительскому элементу, который вы хотите (т.е. S:Envelope/S:Body/ns23:FundRequest/ns23:request/ns2:Cheques/ns6:Cheque
).Оттуда вы можете явно извлекать дочерние элементы один за другим в предложении select, используя b.improv.values()
.
. Я удалил некоторые пространства имен, потому что, честно говоря, мне не хотелось вводить их все. Но вотупрощенный пример того, что я имею в виду.
if object_id('tempdb.dbo.#xml') is not null drop table #xml
select cast('
<FundsDeposit xmlns:ns6="http://schemas.datacontract.org/2004/07/testbank.ManagedServices.Common.Entities">
<request>
<Cheques>
<ns6:Cheque>
<ns6:CHEQUEACCOUNT>0011411</ns6:CHEQUEACCOUNT>
<ns6:CHEQUEACCOUNTTYPE>000</ns6:CHEQUEACCOUNTTYPE>
<ns6:CHEQUEAMOUNT>10.0</ns6:CHEQUEAMOUNT>
<ns6:CHEQUEBANK>01</ns6:CHEQUEBANK>
<ns6:CHEQUEBRANCH>1010</ns6:CHEQUEBRANCH>
<ns6:CHEQUENUMBER>0101</ns6:CHEQUENUMBER>
</ns6:Cheque>
<ns6:Cheque>
<ns6:CHEQUEACCOUNT>00113111</ns6:CHEQUEACCOUNT>
<ns6:CHEQUEACCOUNTTYPE>000</ns6:CHEQUEACCOUNTTYPE>
<ns6:CHEQUEAMOUNT>30.0</ns6:CHEQUEAMOUNT>
<ns6:CHEQUEBANK>02</ns6:CHEQUEBANK>
<ns6:CHEQUEBRANCH>1010</ns6:CHEQUEBRANCH>
<ns6:CHEQUENUMBER>0101</ns6:CHEQUENUMBER>
</ns6:Cheque>
<ns6:Cheque>
<ns6:CHEQUEACCOUNT>0011211</ns6:CHEQUEACCOUNT>
<ns6:CHEQUEACCOUNTTYPE>000</ns6:CHEQUEACCOUNTTYPE>
<ns6:CHEQUEAMOUNT>20.0</ns6:CHEQUEAMOUNT>
<ns6:CHEQUEBANK>03</ns6:CHEQUEBANK>
<ns6:CHEQUEBRANCH>1010</ns6:CHEQUEBRANCH>
<ns6:CHEQUENUMBER>0101</ns6:CHEQUENUMBER>
</ns6:Cheque>
</Cheques>
</request>
</FundsDeposit>'
as xml) as SoapInput_CAST into #xml
;with XMLNAMESPACES ( 'http://schemas.datacontract.org/2004/07/testbank.ManagedServices.Common.Entities' as ns6 )
select
b.improv.value('ns6:CHEQUEACCOUNT[1]', 'nvarchar(max)'),
b.improv.value('ns6:CHEQUEBANK[1]', 'nvarchar(max)')
from #xml a
cross apply a.SoapInput_CAST.nodes('FundsDeposit/request/Cheques/ns6:Cheque') b(improv)
Надеюсь, это поможет.
EDIT Я думаю, что часть, за которой вы, вероятно, были в основном после, была списком выбора.Вы также можете по существу использовать путь, который вы уже используете в функции nodes()
, но вы хотите охватить его до родительского узла (то есть Cheque
), а не CHEQUEBANK