XML Datei zeigt nicht das richtige Ergebnis
Anna85
- xml
Hallo und guten Morgen, ich baue grade eine xml, die Daten kommen aus mssql Server. Ich bekomme zwar Ergebnis, aber nicht so wie gewünscht. Meine fertige xml Datei soll so aussehen:
<v1:farbe id="11" type="l">
<v1:artikels>
<v1:artikel>A bis Z</v1:artikel>
</v1:artikels>
<zusaetze>
<zusatz xmlns:v1="test.de" xmlns:commons="v3.test" logicalName="gruppe" key="050" />
</zusaetze>
</v1:farbe>
aber es sieht so aus:
<v1:farbe id="11" type="l">
<v1:artikels>
<v1:artikel>A bis Z</v1:artikel>
</v1:artikels>
<zusaetze>
<zusatz xmlns:v1="test.de" xmlns:commons="v3.test" logicalName="gruppe" key="050" />
<zusatz xmlns:v1="test.de" xmlns:commons="v3.test" logicalName="gruppe" key="030" />
<zusatz xmlns:v1="test.de" xmlns:commons="v3.test" logicalName="gruppe" key="020" />
</zusaetze>
</v1:farbe>
Meine Abfrage ist so:
WITH XMLNAMESPACES (
'xmlns:v1="test.de"' as commons,
'xmlns:commons="v3.test" ' as v1)
Select tab.id as '@id',
'zusatz' as '@type',
titel1 as 'v1:zusaetze/v1:zusatz',
,(
Select
'DDC_Sachgruppen' as '@logicalName'
,gruppe as '@key'
from tab
order by tab.id
offset 0 rows
fetch next 3 row only
FOR XML PATH('zusatz'), TYPE
) as zusaetze
FROM [zdb_import2]
order by tab.id
offset 0 rows
fetch next 3
row only
FOR XML PATH('v1:farbe'), ROOT('v1:farben')
Ich möchte einfach nur erste 3 Datensätze holen aus der Datenbank. An sich holt mir die Abfrage 3 Datensätze, aber jedes mal mit 3 gleichen Zusätze, was falsch ist. Zu jede Datensatz ist ein Zusatz. Wie kann ich meine Abfrage korrigieren?
Vielen Dank im Voraus für jede Antwort!
Hallo,
zu deinem Problem kann ich im Moment leider nichts beitragen, aber ich habe mal dein Posting repariert.
Ciao,
Martin
Hi,
Select tab.id as '@id', 'zusatz' as '@type', titel1 as 'v1:zusaetze/v1:zusatz', ,( Select 'DDC_Sachgruppen' as '@logicalName' ,gruppe as '@key' from tab order by tab.id offset 0 rows fetch next 3 row only FOR XML PATH('zusatz'), TYPE ) as zusaetze FROM [zdb_import2]
Dein innerer Select hat keinerlei Abhängigkeit vom äußeren Select, also holt er für jeden Record des äußeren selects die gleichen 3 Records des inneren.
Statt der unrelated subquery müßtest Du vermutlich eine correlated subquery verwenden - evtl. auch einen join.
Aber ohne Kenntnis des Tabellenaufbaus ist das schwer zu sagen.
cu,
Andreas a/k/a MudGuard
Hallo, das ist nur eine Tabelle. Die Daten hole ich nun aus eine Tabelle.
Deshalb habe ich gedacht, es ist einfach. Ich hole mir nur der Artkel und der Zusatz dazu. Das Problem ist nur, dass der Zusatz einen container braucht, der "gruppe" heisst. Also die xml muss einfach so aussehen:
<v1:farbe id="11" type="l">
<v1:artikels>
<v1:artikel>A bis Z</v1:artikel>
</v1:artikels>
<zusaetze>
<zusatz xmlns:v1="test.de" xmlns:commons="v3.test" logicalName="gruppe" key="050" />
</zusaetze>
</v1:farbe>
Und ich weiß, dass man das mit @ einbaut, aber kriege ich nicht hin. Ich werde dankbar für eine Antwort!
Ich habe jetzt so versucht:
Select tab.id as '@id',
'zusatz' as '@type',
titel1 as 'v1:zusaetze/v1:zusatz'
where exists(
Select
'DDC_Sachgruppen' as '@logicalName'
,gruppe as '@key'
from tab
order by tab.id
offset 0 rows
fetch next 3 row only
FOR XML PATH('zusatz'), TYPE
) as zusaetze
FROM [zdb_import2]
Dann bekomme ich keine Zusätze im Ergebnis