I have been referencing previous post's trying to read this XMl file supplied by a customer. Although i get various results from different methods, I cannot get it right.
Best I can come up with only returns 1 record, and the file may contain an unknown number of records
Code I get to work
Declare @XML as XML = (Select REPLACE([ImportFile], 'xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03"', '') FROM [ImportFiles] where ID = 'C75696BA-14CB-443A-9BBF-35F8148682A2')
SELECT
X.XMLData.value('(//Document/CstmrCdtTrfInitn/PmtInf/CdtTrfTxInf/CdtrAgt/FinInstnId/ClrSysMmbId/MmbId)[1]','varchar(6)') AS SortCode,
X.XMLData.value('(//Document/CstmrCdtTrfInitn/PmtInf/CdtTrfTxInf/CdtrAcct/Id/Othr/Id)[1]','varchar(8)') AS AccountNumber,
X.XMLData.value('(//Document/CstmrCdtTrfInitn/PmtInf/Dbtr/Nm)[1]','varchar(18)') AS AccountName,
X.XMLData.value('(//Document/CstmrCdtTrfInitn/PmtInf/CdtTrfTxInf/Amt/InstdAmt)[1]','varchar(18)') AS 'Value',
X.XMLData.value('(//Document/CstmrCdtTrfInitn/PmtInf/CdtTrfTxInf/RmtInf/Ustrd )[1]','varchar(18)') AS Reference
FROM (VALUES(@XML))X(XMLData)
XML Data
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
<CstmrCdtTrfInitn>
<PmtInf>
<CdtTrfTxInf>
<Amt>
<InstdAmt Ccy="GBP">456.29</InstdAmt>
</Amt>
<CdtrAgt>
<FinInstnId>
<ClrSysMmbId>
<MmbId>111111</MmbId>
</ClrSysMmbId>
</FinInstnId>
</CdtrAgt>
<Cdtr>
<Nm>COMPANY A</Nm>
</Cdtr>
<CdtrAcct>
<Id>
<Othr>
<Id>12121212</Id>
</Othr>
</Id>
</CdtrAcct>
<RmtInf>
<Ustrd>INVOICE TESTJ0147277 </Ustrd>
</RmtInf>
</CdtTrfTxInf>
<CdtTrfTxInf>
<Amt>
<InstdAmt Ccy="GBP">2055.00</InstdAmt>
</Amt>
<CdtrAgt>
<FinInstnId>
<ClrSysMmbId>
<MmbId>333333</MmbId>
</ClrSysMmbId>
</FinInstnId>
</CdtrAgt>
<Cdtr>
<Nm>COMPANY B</Nm>
</Cdtr>
<CdtrAcct>
<Id>
<Othr>
<Id>44444444</Id>
</Othr>
</Id>
</CdtrAcct>
<RmtInf>
<Ustrd>INVOICE TESTJ02772TWO</Ustrd>
</RmtInf>
</CdtTrfTxInf>
</PmtInf>
</CstmrCdtTrfInitn>
</Document>