如何将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>
</opties>
<klant>
<aanhef>De heer</aanhef>
<naam>voornaam</naam>
<adres>adres</adres>
<postcode>postcode</postcode>
<email>mailadres@mailadres.com</email>
<rekeningnummer>012345678</rekeningnummer>
</klant>
</reservering>'
'SELECT
ReserveringNummer = Reservering.value('@reserveringsnummer', 'int'),
ReserveringStatus = Reservering.value('@status', 'varchar(50)'),
Park = Reservering.value('(park)[1]', 'varchar(50)'),
Accomodatie = Reservering.value('(accomodatie)[1]', 'varchar(50)'),
AantalBezoekers = Reservering.value('(aantalBezoekers)[1]', 'int'),
StartDatum = Reservering.value('(startdatum)[1]', 'date'),
EindDatum = Reservering.value('(einddatum)[1]', 'date'),
Voorkeur = Reservering.value('(voorkeur)[1]', 'varchar(50)'),
Opties = Opties.value('(optie)[1]', 'varchar(50)'),
Aanhef = Klant.value('(aanhef)[1]', 'varchar(50)'),
KlantNaam = Klant.value('(naam)[1]', 'varchar(50)'),
Adres = Klant.value('(adres)[1]', 'varchar(50)'),
Postcode = Klant.value('(postcode)[1]', 'varchar(50)'),
Email = Klant.value('(email)[1]', 'varchar(50)'),
Rekeningnummer = Klant.value('(rekeningnummer)[1]', 'varchar(50)')
FROM
@XML.nodes('/reservering') AS ReserveringTable(Reservering),
@XML.nodes('/reservering/opties') AS OptiesTable(Opties),
@XML.nodes('/reservering/klant') AS KlantTable(Klant)
INSERT INTO dbo.PRODUCT(naam)
VALUES (Opties)
SELECT SCOPE_IDENTITY() AS ProductID;
INSERT INTO dbo.WONING(naam)
VALUES (Accomodatie)
SELECT SCOPE_IDENTITY() AS WoningID;
INSERT dbo.KLANT(aanhef, naam, adres, postcode, emailadres, rekeningnummer)
VALUES (Aanhef, KlantNaam, Adres, Postcode, Email, Rekeningnummer)
SELECT SCOPE_IDENTITY() AS KlantID;
INSERT INTO dbo.RESERVERING(reserveringsnummer, status, van_datum, tot_datum, woning_id, product, voorkeur, prijs, klant, aantal_bezoekers)
VALUES (ReserveringNummer, ReserveringStatus, StartDatum, EindDatum, WoningID, ProductID, Voorkeur, Prijs, KlantID, AantalBezoekers)
正如你所看到的那样,我也试图获取产品并将ID记录到我的RESERVERING表中,这是正确的方法吗?现在程序给我一个错误:无效的列名'columnname',其中columnname是值。它为我在INSERT语句中定义的所有值提供了相同的错误。
答案 0 :(得分:1)
修正了问题。对于对解决方案感兴趣的人:
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>
</opties>
<klant>
<aanhef>De heer</aanhef>
<naam>name</naam>
<adres>adres</adres>
<postcode>postcode</postcode>
<email>mail</email>
<rekeningnummer>012345678</rekeningnummer>
</klant>
</reservering>'
INSERT INTO [PRODUCT](
[naam])
SELECT
Opties = Opties.value('(optie)[1]', 'varchar(50)')
FROM
@XML.nodes('/reservering/opties') AS OptiesTable(Opties)
DECLARE @ProductID AS int
SET @ProductID = @@IDENTITY
INSERT INTO [WONING](
[naam])
SELECT
Accomodatie = Reservering.value('(accomodatie)[1]', 'varchar(50)')
FROM
@XML.nodes('/reservering') AS ReserveringTable(Reservering),
@XML.nodes('/reservering/opties') AS OptiesTable(Opties),
@XML.nodes('/reservering/klant') AS KlantTable(Klant)
DECLARE @WoningID AS int
SET @WoningID = @@IDENTITY
INSERT INTO [KLANT](
[aanhef], [adres], [emailadres], [naam], [postcode], [rekeningnummer])
SELECT
Aanhef = Klant.value('(aanhef)[1]', 'varchar(50)'),
Adres = Klant.value('(adres)[1]', 'varchar(50)'),
Email = Klant.value('(email)[1]', 'varchar(50)'),
KlantNaam = Klant.value('(naam)[1]', 'varchar(50)'),
Postcode = Klant.value('(postcode)[1]', 'varchar(50)'),
Rekeningnummer = Klant.value('(rekeningnummer)[1]', 'varchar(50)')
FROM
@XML.nodes('/reservering') AS ReserveringTable(Reservering),
@XML.nodes('/reservering/opties') AS OptiesTable(Opties),
@XML.nodes('/reservering/klant') AS KlantTable(Klant)
DECLARE @KlantID AS int
SET @KlantID = @@IDENTITY
INSERT INTO [RESERVERING](
[aantal_bezoekers], [product], [reserveringsnummer], [status], [van_datum],
[tot_datum], [voorkeur], [woning_id], [klant])
SELECT
AantalBezoekers = Reservering.value('(aantalBezoekers)[1]', 'int'),
@ProductID,
ReserveringNummer = Reservering.value('@reserveringsnummer', 'int'),
ReserveringStatus = Reservering.value('@status', 'varchar(50)'),
StartDatum = Reservering.value('(startdatum)[1]', 'date'),
EindDatum = Reservering.value('(einddatum)[1]', 'date'),
Voorkeur = Reservering.value('(voorkeur)[1]', 'varchar(50)'),
@WoningID,
@KlantID
FROM
@XML.nodes('/reservering') AS ReserveringTable(Reservering),
@XML.nodes('/reservering/opties') AS OptiesTable(Opties),
@XML.nodes('/reservering/klant') AS KlantTable(Klant)