SQL XML aus mehreren Tabellen erstellen

LauraM

Ensign
Registriert
Nov. 2019
Beiträge
133
Guten Abend, ich möchte aus pas Tabellen (MSSQL) eine XML Datei erstellen.
Das kann ich machen mit Verknüpfung etc.
Allerdings gibt es in Tabellen Verknüpfungen, wo für einen Datensatz entstehen 5 Elemente, für anderen mehr, oder weniger.
Wie heißt so eine Funktion, wie kann ich XML bauen in dem ich sage, geh durch die Tabellen und sammle zu jeweilige nr alle Infos?
Für jede Antwort werde ich sehr dankbar!
Gute Nacht
 
Hallo, ich habe das grade gelesen, aber leider nicht gefunden, wie meine Fkt case oder so, durch tabellen gehen kann, Infos sammelt und am Ende XML erstellt. Also XML erstellen, wo Beziehung 1:1 vorhanen ist,ist k Problem. Ich muss bauen, was (oben beschrieben 🤦‍♀️)
Dazu muss ich leider sagen,bin kein Programmierer und fällt mir das alles total schwer. An sich, weiß ich was ich möchte, nun leider kann ich noch nicht in Programmiersprache umsetzen.

Aber danke noch mal für den Link!
 
Guten Morgen, wie kann ich bei XML sagen: wenn in der Tabelle NULL steht, dann betrachte das Element nicht, dann lies ihm nicht????
 
du musst mal anfangen dich verständlich auszudrücken. Input und gewünschter Output nennen hilft Leuten beim Verständnis. Ich weiß jetzt z.B. nicht mehr ob du jetzt von SQL redest oder von irgendwas anderem ...
Was soll den "bei XML sagen" heißen? XML ist ein Format für semi-strukturierte Daten, mehr nicht. Und was hat XML jetzt mit Tabellen mit NULL Werten zu tun?

Dass du bei SQL einfach column_name[/I] IS NOT NULL schreiben kannst, sollte ja bekannt sein. Also verstehe ich (mal wieder) nicht was genau du willst, deine ganzen Fragen sind meist eher kryptisch.

Bis heute hast du auch nicht geschafft mal dein ganzes Vorhaben zu beschreiben ...
 
  • Gefällt mir
Reaktionen: Oelepoeto
SQL ist schlicht und ergreifend nicht das richtige Werkzeug für den Anwendungsfall. Es mag ja sein, dass du kein C# oder eine andere Programmiersprache beherrschst, aber SQL ist KEINE Programmiersprache und kann auch nicht als solche missbraucht werden. Du versuchst nun schon über ein Dutzend Threads, deine Probleme mit dem falschen Werkzeug zu lösen. Eine Datenbank ist genau das was der Name impliziert, ein Speicher für Daten. Was eine Datenbank nicht ist, ist der Ort, an dem man diese Daten verarbeitet.

Offenbar hast du ein XY-Problem solchen Ausmaßes wie ich es noch nie erlebt habe. Da du dich auch nur von Thread zu Thread hangelst und sogar schon von den Mods darauf hingewiesen wurdest, dass das nicht erwünscht ist, sind die Infos zu deinem X, also deinem eigentlichen Vorhaben (OHNE etwaige Lösungsansätze, NUR das was du am Ende erreichen willst!!!), quasi nicht existent. Du fängst in jedem Threads auf's Neue an, nur dein Y zu schildern, also deinen vermeintlichen Lösungsweg, der wie erwähnt mit dem falschen Werkzeug angegangen wird.

Mit einem C#-Programm (o.ä.) kann man all deine Probleme binnen weniger Minuten lösen. Einem XML-Serializer kann man beispielsweise als Einstellung mitgeben, dass er NULL-Werte entweder als solche in das XML einbauen oder sie weglassen soll.


Also nochmal: Benutze das richtige Werkzeug für dein Vorhaben und missbrauche nicht SQL für etwas, für das es nicht geeignet ist!

Und vor allem: Wenn du noch weitere Hilfe haben möchtest, fang endlich an, von Anfang bis Ende dein Vorhaben zu erklären!

Gerade in Anbetracht, dass du in einem anderen Thread von über 1 Million Datensätzen gesprochen hast, bezweifle ich ernsthaft, dass es sich hier um ein Privatprojekt handelt. Vielmehr befürchte ich, dass es sich um einen geschäftlichen Vorgang handelt, womöglich sogar einen, für den ein Kunde bezahlt......
 
Es ist ja kein Geschäft. Ich habe ein Projekt und versuche ich die Lösung finden.

Es tut mir leid, dass ich mich nicht so ausdrücken kann. Für mich als kein Programmierer, ein bisschen schwierig.

Ich benutze mssql und mit xmlpath, frage ich Tabellen ab und baue ich xml, was auch funktioniert.
Nun jetzt habe ich ein Problem, weill ich wahrscheinlich keine Grundlagenkenntnisse habe, dass in der Tabellen das Wort NULL steht. Es bedeutet, dass wenn ich xml versuche zu erstellen, erstellt mir auch Elemente, wo nichts drin steht, was falsch ist. Es soll mir nur Elemente dort erstellen, wo Werte vorhanden sind:

IST:
Code:
 <v1:testid="012" type="farbe">
    <v1:farben>
      <v1:farbe>test</v1:farbe>
    </v1::farben>
    <v1:nrs>
      <nr></nr>
   </v1:nrs>
</v1:test>

Soll:
Code:
 <v1:testid="012" type="farbe">
    <v1:farben>
      <v1:farbe>test</v1:farbe>
    </v1:farben>
    
</v1:test>

In der obigen Beispiel ist nrs als Element, obwohl die Zeile leer ist. Es soll ohne den Element nrs xml erstellt werden.

Nun weiss ich nicht, wie ich die Prozedur schreiben soll:
Code:
WITH XMLNAMESPACES (
'...,
'......' as v1)


select top 20000
    tab1.nr as '@id',
            
            testid1 as 'v1:monat',
            farbeas 'v1:farben/farbe',
            nr as 'v1:nrs/nr'
          
            FROM [tab1] 
            
            left join tab4  on tab1.nr=tab4.nr
            left join tab2 on tab1.nr=tab2.nr
        
            
FOR XML PATH('v1:test'), ROOT('v1:tests')

Kann mir nur jemand sagen, wie ich in meine Prozedur schreiben kann: wenn null in der Tabelle, dann kein Element soll in xml entstehen?
 
LauraM schrieb:
Es tut mir leid, dass ich mich nicht so ausdrücken kann. Für mich als kein Programmierer, ein bisschen schwierig.
Darum geht es auch nicht. Keiner verlangt, dass du bereits einen fertigen Lösungsweg beschreibst, das tust du aber! Du sollst vielmehr konkret erklären was für Quelldaten du hast - mit Beispielen - und was du mit diesen Quelldaten anstellen willst, nicht das "wie"! Dein Fehler ist, dass du offenbar von vornherein SQL als dein Werkzeug auserkoren hast, mit diesem Werkzeug nicht klarkommst - u.a. weil es dafür nur bedingt geeignet ist - und dann fragst du hier danach wie du mit diesem falschen Werkzeug umgehen sollst. Das zugrundeliegende Vorhaben kennen wir immer noch nicht.

Richtig:
"Ich möchte eine CSV, die so aussieht [HierBeispielDaten], umwandeln, um sie in [NameVonProgrammXY] als XML [HierBeispielFürDasZielFormat] zu importieren"

Falsch:
Thread1 -> Ich hab eine CSV in SQL importiert und die Daten sind in den falschen Feldern. Wie verschiebe ich sie?
Thread2 -> Ich habe eine SQL-Tabelle und da sind NULL drin, wie kriege ich die weg?
Thread3 -> Ich habe mehrere Daten, die zu einem Datensatz gehören und nicht richtig verlinkt sind
Thread4 -> Wie exportiere ich XML aus SQL?
Thread5 -> Mein XML-Export aus SQL ist falsch, wie mache ich den richtig?
....

Bei deiner Variante erstellst du ein Dutzend Threads, die jeweils immer nur einen Teil des Problems darstellen und vor allem von deiner Seite vorgeben wie die Lösung auszusehen hat - nämlich innerhalb des SQL-Servers. Würde man dein eigentliches Vorhaben kennen, das du wie dargestellt auch in nicht-programmierer-Worten erklären kannst und sogar sollst, hätte man dich vermutlich schon längst durch eine Lösung mit C#, o.ä. gelotst. Und ja, ich habe gelesen, dass du kein Programmierer bist, aber SQL kannst du offensichtlich auch nicht, das ist also kein Argument.

Ich will dir wirklich nicht zu nahe treten, aber so wie du an das Problem herangehst, ist deine Lösung zum Scheitern verurteilt. :(
 
  • Gefällt mir
Reaktionen: Oelepoeto
Hi, also mein Problem hast du gut erkannt. Ich habe immer wieder nach etwas gefragt.
Heute weiss ich, wie ich das machen möchte, nun weiss ich nicht, wie ich das mit Null machen kann (was ich oben beschrieben habe). Ich habe schon gefunden, dass ich die Fkt benutzen kann: ELEMENTS XSINIL

Ich habe auch das gemacht. Allerdings es funktionirt nur dort, wo in der Tabelle ein Null steht. Wenn in der Tabelle ein NULL steht, was über die Tabellen-Verknüpfung entstanden ist, funktioniert es nicht.

Könntest du mir bitte sagen, wie ich in meine xml Datei formulieren soll, damit ich auf mein Ergebnis komme.
Wenn nicht, sag bescheid, es ist dann so und muss ich weiter suchen.
 
Dir wurde doch schon bereits mehrmals erklärt, wie du mit NULL-Werte umgehen kannst? Sogar in diesem Thread wurde schon geschrieben WHERE spaltennname IS NOT NULL
Das ist bestimmt auch das Erste, was dir die Microsoft Dokumentation zu SQL Server liefert. Die zweite Lösung, die dir bereits gegeben wurde ist in einzelne Felder die Ausgabe von NULL zu verhindern.
Wenn du schon so viele Fragen stellst solltest du zumindest die Antworten auch lesen..
 
Danke für bisherige Antworte!
ich habe Lösung gefunden, dank euch.
Wie ich erwähnt habe, ich habe 2 Art von NULLen. Null, die enstanden ist durch leeres feld und Null, die enstanen ist, da ich Vreknüpfung gemacht habe. Wenn ich die Bedingung schreibe:

where nr is not null and nr != 'null'

dann funktioniert es.

Danke für bisherige Geduld.
 
Zuletzt bearbeitet:
Wenn ich schon hier bin, möchte ich leider wieder was fragen.
Wie schon 100 Mal erwähnt habe ich eine Tabelle, wo zu einem Nummer viele Datesätze vorkommen.
Ich kann das aso abfragen, dann sehe ich nur einen, letzten Datensatz:
Code:
 (select distinct nr, min( farbe) from tab1 group by nr)

Nun die Abfrage möchte ich hier :

Code:
WITH XMLNAMESPACES (
'...,
'......' as v1)


select top 20000
    tab1.nr as '@id',
            
            testid1 as 'v1:monat',
            farbeas 'v1:farben/farbe',
            nr as 'v1:nrs/nr'
          
            FROM [tab1] 
            
            left join tab4  on tab1.nr=tab4.nr
            left join tab2 on tab1.nr=tab2.nr
        
            
FOR XML PATH('v1:test'), ROOT('v1:tests')
plezieren.

Ich habe auch das anstatt nr geschreiben, aber bekomme Meldung:

Code:
Meldung 116, Ebene 16, Status 1, Zeile 16
Nur ein einziger Ausdruck kann in der Auswahlliste angegeben werden, wenn die Unterabfrage nicht mit EXISTS eingeleitet wird.

Mit der Meldung kann ich leider nicht umgehen. Könntet ihr mir bitte helfen?
 
Zurück
Oben