基本上我有一个XML文件,类似于:
<gesmes:Envelope xmlns:gesmes="http://www.gesmes.org/xml/2002-08-01" xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref">
<Cube>
<Cube time="2018-06-15">
<Cube currency="USD" rate="1.2345"/>
<Cube currency="ZAR" rate="10.1"/>
</Cube>
<Cube time="2018-06-16">
<Cube currency="USD" rate="1.1596"/>
<Cube currency="ZAR" rate="9.546"/>
</Cube>
</Cube>
</gesmes:Envelope>
我这样插入:
INSERT INTO
fxRatesXml(xmlData, updatedOn)
SELECT
CONVERT(XML, bulkColumn),
GETDATE()
FROM
OPENROWSET(BULK 'I:\Downloads\eurofxref-hist-90d.xml', SINGLE_BLOB) as fxRateXmlData;
然后我试着这样读时间、货币和利率:
DECLARE @xml AS XML, @hDoc AS INT, @sql NVARCHAR (MAX)
SELECT
@xml = xmlData
FROM
fxRatesXml
EXEC sp_xml_preparedocument @hDoc OUTPUT, @xml, '<root xmlns:gesmes="http://www.gesmes.org/xml/2002-08-01" xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref"/>'
SELECT
*
FROM
OPENXML(@hDoc, 'gesmes:Cube')
WITH
(
[time] nvarchar(max) 'Cube/time',
currency nvarchar(max) 'Cube/Cube/currency',
rate nvarchar(max) 'Cube/Cube/rate'
)
EXEC sp_xml_removedocument @hDoc
但没有运气。
我不知道我哪里出错了,任何帮助都会被感激的。
更新
更新了XML以更具体。它可以包含2个以上的时间立方和2个以上的货币每立方的时间。
我如何迭代/选择它们?