声明了以下XML:
DECLARE @XML XML = '<reservering reserveringsnummer="1" status="aanvraag">
<park>Nationaal park Oosterschelde</park>
<accomodatie>Appartement</accomodatie>
<aantalBezoekers>2</aantalBezoekers>
<startdatum>2013-12-12</startdatum>
<einddatum>2013-12-20</einddatum>
<voorkeur>Rustige plaats</voorkeur>
<opties>
<optie>arrangement</optie>
<optie>bedlinnenset</optie>
</opties>
<klant>
<aanhef>De heer</aanhef>
<naam>Naam</naam>
<adres>Adres</adres>
<postcode>Postcode</postcode>
<email>Mail</email>
<rekeningnummer>nummer</rekeningnummer>
</klant>
</reservering>'
我想将选项(arrange和bedlinnenset)插入到我的数据库表中。现在我有以下代码来实现这个目标:
INSERT INTO [RESERVERING_PRODUCT](
[reserveringnummer], [product])
SELECT
ReserveringNummer = Reservering.value('@reserveringsnummer', 'int'),
Opties = Opties.value('(optie)[1]', 'varchar(50)')
FROM
@XML.nodes('/reservering') AS ReserveringTable(Reservering),
@XML.nodes('/reservering/opties') AS OptiesTable(Opties)
使用此代码,我只能通过执行(optie)[1]
,(optie)[2]
等来选择必须在我的表中插入哪个选项。但是,如何插入XML中的每个选项?
答案 0 :(得分:2)
您非常接近 - 您只需添加CROSS APPLY
即可获得<optie>
节点下所有<reservering>
个子节点的列表:
SELECT
ReserveringNummer = XReservering.value('@reserveringsnummer', 'int'),
Opties = XOpties.value('(.)', 'varchar(50)')
FROM
@XML.nodes('/reservering') AS XTbl1(XReservering)
CROSS APPLY
XReservering.nodes('opties/optie') AS XTbl2(XOpties)
执行此操作后,您将评估所有<optie>
个节点,现在您可以轻松地将这些数据插入到表格中