2013-11-29 3 views
0

Как я могу получить данные XML в правых таблицах в моей базе данных? У меня есть следующий код:Вставка данных XML в базу данных SQL

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>[email protected]</email> 
    <rekeningnummer></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) 

Как вы можете видеть, я также пытаюсь получить продукт и Woning идентификаторов в мою RESERVERING таблицу, это правильный способ сделать это? Прямо сейчас программа дает мне ошибку: недопустимое имя столбца «columnname», где значение столбца - это значение. Это дает мне ту же ошибку для всех значений, определенных в моей инструкции INSERT.

+0

Какую базу данных вы используете? – alex

+0

SQL Server 2008 R2 и я работаю с Microsoft SQL Server Management Studio – user2237168

ответ

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></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) 
Смежные вопросы