25. maj 2004 - 12:46Der er
14 kommentarer og 1 løsning
Import af wellformed XML
Hej!
Jeg sidder i øjeblikket i forbindelse med en skoleopgave og prøver på at få importeret et welformed xml-dokument importeret i MS SQL. Der, hvor jeg er nået til, får jeg imidlertid fejlmeldingen 'Server: Msg 208, Level 16, State 1, Line 21 Invalid object name 'leverandoerID'.'
Nogen, der har en løsning?
Min storedprocedure er indtil videre:
DECLARE @hdoc int DECLARE @doc varchar (1000) Set @doc=' <ROOT>
<leverandoerID>1010</leverandoerID>
<produkt type="ny" leverandoerVareNr="9999"> <prisumoms="100" prismmoms="125" vareType="Kanelstang" vareUnderType="30 pund" beskrivelse="Masser af kanel og sukker"> </produkt>
</ROOT>'
EXEC sp_xml_preparedocument @hdoc OUTPUT
-- OPENXML benyttes til at indsætte en række af hhv. katalog og varedata i den relationelle database.
INSERT leverandoerID Select leverandoerID FROM OPENXML (@hdoc, N'/ROOT/leverandoerID') WITH katalog
INSERT produkt Select leverandoerVareNr, prisumoms, prismmoms FROM OPENXML (@hdoc, N'/ROOT/produkt') WITH katalog
INSERT produkt Select vareType, vareUnderType, beskrivelse FROM OPENXML (@hdoc, N'/ROOT/produkt') WITH vare
-- Fjernelse af den interne præsentation af XML-dokumentet
Jeg kan sådan set godt forstå, hvad meldingen går på, eftersom katalog gerne skal importere attributterne leverandoerID, leverandoerVareNr, prisumoms og prismmoms. Jeg har imidlertid behov for, at der kan eksistere mange hhv. leverandoerVareNr, prisumoms og prismmoms for hvert leverandoerID - derfor er XML'en designet, som den er.
Har forsøgt at lave et andet mere simpelt eksempel, hvor jeg kun forsøger at importere informationer til en enkelt tabel. Problemet er imidlertid, at så længe jeg ikke tager @doc delen med returnerer proceduren fint et tomt datasæt.
Når jeg tilføjer @doc, får jeg imidlertid fejlmeldingen:
Server: Msg 6603, Level 16, State 1, Procedure sp_xml_preparedocument, Line 11 XML parsing error: An Invalid character was found in text content.
Det nye eksempel, jeg arbejder med er som følger:
DECLARE @hdoc int DECLARE @doc varchar (1000) Set @doc=' <ROOT>
<vare vareNr="12222" vareType="Stor hammer" vareUnderType="Meget Stor Hammer" beskrivelse="Slår meget hårdt"> </vare>
</ROOT>'
EXEC sp_xml_preparedocument @hdoc OUTPUT, @doc
Select * FROM OPENXML (@hdoc, '/ROOT/vare') WITH vare
Har forsøgt mange placeringer, men får enten meldingen, at syntaksen er forkert eller: Server: Msg 6603, Level 16, State 1, Procedure sp_xml_preparedocument, Line 12 XML parsing error: The following tags were not closed: ROOT.
Har også forsøgt at ændre de danske tegn, men får så fortsat meldingen om 'invalid character'.
Underligt... nu virker det også hos mig... selv det eksempel, som jeg selv gav lige i forrige kommentar, så længe jeg bare ændrer de danske tegn. Jeg må have begået en eller anden fejl før... har dog endnu ikke fundet ud af hvad.
Men mange, mange tak for hjælpen. Nu kan jeg gå videre med at udvide importstatementen. Hvis du lige kaster et svar, så vil jeg med største fornøjelse give dig pointsene. :o)
Hehe... det er det i hvert fald, men den kræver en hel del indsigt. Når man sidder som fuldstændigt nybegynder står man tit og mangler forklaring på eksemplerne.
Ved du for resten, om det kan lade sig gøre at foretage opdates af enkelte kolonner i en eksisterende tuppel via OPENXML? Ifølge Books Online kan det, men de giver intet eksempel på syntaksen.
Er nået frem til følgende, men datasættet er tomt - 'O rows was affected':
DECLARE @hdoc int DECLARE @doc varchar (1000) Set @doc=' <?xml version="1.0" encoding="iso-8859-1" ?> <ROOT>
<vare vareNr="12223" vareType="Lille fin hammer" vareUnderType="Meget lille fin Hammer" beskrivelse="Slår utroligt hårdt"> </vare>
</ROOT>'
EXEC sp_xml_preparedocument @hdoc OUTPUT, @doc
UPDATE vare SET vare.vareType = N'/ROOT/vare/vareType', vare.vareUnderType = N'/ROOT/vare/vareUnderType' FROM OPENXML (@hdoc, N'/ROOT/vare') WITH vare WHERE vare.vareNr = N'/ROOT/vare/vareNr'
UPDATE vare SET vare.vareType = xmlvare.varetype, vare.vareUnderType = xmlvare.vareUnderType FROM OPENXML (@hdoc, N'/ROOT/vare') WITH vare xmlvare WHERE vare.vareNr = xmlvare.varenr
Så godt, at Books Online viser det på den måde et sted, men jeg troede, at xml foran var alt for generelt til, at OpenXML kunne finde ud af at finde det. Man lærer noget nyt hele tiden.
Mange tak for hjælpen.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.