INPUT XML in MSSQL
LeKuchen
- datenbank
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
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
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