![]() |
SELFHTML Forumsarchiv |
|
|
Die folgende Nachricht zum Thema stammt von: LeKuchen, 30. 08. 2006, 16:32
Hallo zusammen,
der neue SQL 2005 unterstützt XML als Datentyp. Mittels einer Stored Procedure möchte ich XML-Fragmente in einer Datenbank speichern.
Das XML sieht wie folgt aus:
<document docid="1">
<data>
<abc />
<cde />
<efg />
</data>
</document>
Das INPUT Statement (das obige XML-Dokument steht im XMLHandler zur Verfügung):
INSERT INTO docs (docid, docxml)
SELECT docid, cast(docxml as xml)
FROM OpenXML(@XMLHandler,'/document', 1)
WITH (docid int '@docid' ,
docxml xml 'data/child::*')
Das Problem ist, das nur das erste Fragment (erster Childnode: <abc />) in die Spalte gespeichert wird und nicht alle drei Fragmente.
Hat jemand dafür eine Lösung?
P.S.: Wenn ich den ganzen data-Knoten speichere mit der XPATH-Angabe 'data' geht es, aber ich möchte gerne nur die Childelemente von data in der Datenbankspalte ablegen...
Gruß
LeKuchen
Die folgende Nachricht zum Thema stammt von: Plutoide, 30. 08. 2006, 19:24
Hi,
»» INSERT INTO docs (docid, docxml)
»» SELECT docid, cast(docxml as xml)
»» FROM OpenXML(@XMLHandler,'/document', 1)
»» WITH (docid int '@docid' ,
»» docxml xml 'data/child::*')
»» [...]
»» Hat jemand dafür eine Lösung?
ich habe eine Idee.
Es liegt moeglicherweise am Parameter 'data/child::*'. Da wuerde ich mal etwas variieren bzw. in der Dokumentation nachlesen, je nach Stimmungslage.
Plutoide
Die folgende Nachricht zum Thema stammt von: LeKuchen, 31. 08. 2006, 09:35
Hallo,
»» »» INSERT INTO docs (docid, docxml)
»» »» SELECT docid, cast(docxml as xml)
»» »» FROM OpenXML(@XMLHandler,'/document', 1)
»» »» WITH (docid int '@docid' ,
»» »» docxml xml 'data/child::*')
»» »» [...]
»» »» Hat jemand dafür eine Lösung?
»» Es liegt moeglicherweise am Parameter 'data/child::*'. Da wuerde ich mal etwas variieren bzw. in der Dokumentation nachlesen, je nach Stimmungslage.
Naja, war auch mein erster Gedanke, dass es an dem XPATH Ausdruck liegt - habe aber alle anderen Möglichkeiten, die XPATH bietet, auch durchgetestet (data/*, etc.) - bringt auch keinen Erfolg.
Gruß
LeKuchen
© 1998-2006
Impressum, Software: Classic Forum