verwendetes Datenbanksystem: <MSSQl Server>
Hallo,
falsch ich hier falsch bin, bitte mitteilen.
Ich bin totale Anfängerin, ich kann kaum programmieren, aber ich habe schon was gemacht.
Ich habe eine Tabelle mit 5 Spalten in meinem MSQL Server.
Ich habe eine XML Schema.
Ich muss die Daten aus der Tabelle in dieser XML Schema einspielen.
Ich habe gelesen, ich kann das mit Skalarfunktion machen, aber es funktioniert nicht, es lädt 0 Zeilen, also es ist was falsch (es kommt kein Fehler!:-))
Könnte mir jemand Schritt für Schritt sagen, wie ich das machen kann?
Viele Grüße aus Ulm
Anna
Hallo Anna85,
Naja, im einfachsten Fall machst du dir eine Konsolenapplikation, die die MSSQL-Datenbank ausliest, die Daten eventuell mappt und dann in dein XML schreibt.
Was hast du denn bisher gemacht? Hast du Code für uns?
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Hallo Anna85,
geht es um das selbe Problem wie bisher od. ist es ein Neues?
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Hallo Anna85,
wie sieht denn das XML-Schema und die Struktur der Tabelle aus?
Muss das ein automatisierter Prozess werden?
Im einfachsten Fall setzt du eine Query im SSMS ab und kopierst das Ergebnis in eine Datei.
Könnte dann je nach XML-Schema so aussehen:
SELECT [Column1], [Column2], ...
FROM [dbo.MyTable]
FOR XML PATH('Entry'), ROOT('Entries')
“Knowledge cannot replace friendship. I'd rather be an idiot than lose you.”
Hallo,
ich versuche es alleine zu machen und passiert schon was, allerdings habe ich eine Frage.
Normalweise hatte ich bei XML Schema nur solche Felder Name, wie <v1:alternative> oder so was, und jetzt habe ich doppelte name:<commons:address1> . Ist das auch eine Name des Felders????
Hallo,
ich frage so ab:
SELECT name, adresse
from tabtest main
FOR XML PATH('adresse1'), ROOT('externeadresse')
und bekomme ich , wie gewünscht:
<externeadresse>
<adresse>
<name>Al-Adudi Hospital</ name>
< adresse1>Organisation</ adresse>
</adresse>
</externeadresse>
Aber meine XML Schema soll so aussehen:, die felder address1 und address2 habe ich auch in der Tabelle, aber ich weiss es nicht, wie ich das abfragen soll, damit es so aussieht:
<externeadresse>
<adresse>
<name>Al-Adudi Hospital</name>
< adresse1>Organisation</adresse1>
<contactAdress>
<commons:address1> test1 </commons:address1>
<commons:address2> test2 </commons:address2>
</contactAdress>
</adresse1>
</externeadresse>
Hallo Anna85,
ich würde es mal so versuchen:
USE MyDB;
WITH XMLNAMESPACES ('commons' as commons)
SELECT name,
adresse1,
adress1 as 'contactAdress/commons:adress1',
adress2 as 'contactAdress/commons:adress2'
FROM [dbo.MyTable]
FOR XML PATH('adresse'), ROOT('externeadresse')
Das liefert bei mir einen solchen output:
<externeadresse xmlns:commons="commons">
<adresse>
<name>a</name>
<adresse1>b</adresse1>
<contactAdress>
<commons:adress1>e</commons:adress1>
<commons:adress2>d</commons:adress2>
</contactAdress>
</adresse>
<adresse>
<name>f</name>
<adresse1>g</adresse1>
<contactAdress>
<commons:adress1>h</commons:adress1>
<commons:adress2>i</commons:adress2>
</contactAdress>
</adresse>
</externeadresse>
“Knowledge cannot replace friendship. I'd rather be an idiot than lose you.”
SELECT name, adresse1, adress1 as 'contactAdress/commons:adress1', adress2 as 'contactAdress/commons:adress2' FROM [dbo.MyTable] FOR XML PATH('adresse'), ROOT('externeadresse')
Und was machst du wenn es nur 1 Adresse gibt oder gar 3 oder 4? Du hast hier (normalerweise) eine 1:n Beziehung in der Datenbank, welche du hart auf 2 Einträge münzt.. Hier sind Fehler vorprogrammiert.
Des Weitern muss ich gestehen, dass ich es von Anna85 ein wenig unverschämt finde, wie Sie hier versucht das Forum als Codegenrator zu missbrauchen.
@Anna85: Ich würde dir empfehlen weniger auf Youtube Videos zur Lösung von einem Problem zu gehen und vielmehr ein gutes Buch in die Hand nehmen und dir die Grundlagen anzueignen damit du die Probleme selbst lösen kannst. Code kopieren welchen du nicht verstehts löst dein Problem nicht wirklich
Hey Stefan,
in der Fragestellung ist explizit die Rede von einer Tabelle mit 5 Spalten.
Bei einer 1:n Beziehung würde ich auch nicht das erwarten:
<contactAdress>
<commons:address1> test1 </commons:address1>
<commons:address2> test2 </commons:address2>
</contactAdress>
sonder:
<contactAdress>
<commons:address> test1 </commons:address>
<commons:address> test2 </commons:address>
</contactAdress>
“Knowledge cannot replace friendship. I'd rather be an idiot than lose you.”
Hey Urza,
deshalb habe ich auch normalerweise geschrieben - denn deine Lösung löst dem TE nur dieses Problem - für die Zukunft hat er das nächste Problem wenn er auf 1:n umstellt... Deswegen auch der Hinweis an den TE sich die Grundlagen anzueignen und nicht nur Code kopieren....
VG
Stefan
Hey Stefan,
jede Lösung muss angepasst werden wenn auf 1:N umgestellt wird. Entweder muss der Quellcode geändert werden oder in meinem Lösungsvorschlag noch ein subselect eingefügt werden.
Ich denke auf das können wir uns einigen 😉:
Deswegen auch der Hinweis an den TE sich die Grundlagen anzueignen und nicht nur Code kopieren....
VG
Matthias
“Knowledge cannot replace friendship. I'd rather be an idiot than lose you.”
Guten Morgen,
vielen lieben Dank, ich habe zu meine irig angepasst und es funktioniert. Das ist ja toll!!!
In meinem orig Schema, ist noch so was: v1 :
<v1:externeadresse>
<v1:adresse>
<v1:name>Al-Adudi Hospital</v1:name>
< v1:adresse1>Organisation</v1:adresse1>
<v1:contactAdress>
<commons:address1> test1 </commons:address1>
<commons:address2> test2 </commons:address2>
</v1:contactAdress>
</v1:adresse1>
</v1:externeadresse>
Ich habe eingfach versucht in dem Code, so zu schreiben:
Use ds-org;
WITH XMLNAMESPACES ('commons' as commons)
SELECT name,
adresse1,
adress1 as 'v1:contactAdress/commons:adress1',
adress2 as 'vi:contactAdress/commons:adress2'
FROM [organisationen]
FOR XML PATH('adresse'), ROOT('externeadresse')
Aber bekomme ich Fehler, wie klann ich das v1 definieren?
Lieben Dank!
Ich habe letzte Schwerpunkt:
ein Punkt in meinem Schema ist noch so definiert, erste Zeile:
<v1:externeadresse id="external_org_id1" type ="organ">
<v1:adresse>
<v1:name>Al-Adudi Hospital</v1:name>
< v1:adresse1>Organisation</v1:adresse1>
<v1:contactAdress>
<commons:address1> test1 </commons:address1>
<commons:address2> test2 </commons:address2>
</v1:contactAdress>
</v1:adresse1>
</v1:externeadresse>
Wie kann ich es für meine Schema das Punkt abfragen?
Und Zweite Frage hätte ich, ist das id in der erste Zeile eine Zahl, die aus der Tabelle zurückkommen soll?
Ich habe noch 2 Spalten in meine Tabelle, aber ich weiss es nicht, ob das die Werte aus der TAbelle sein sollen???
Liebe Grüße!
Hallo Anna85,
Und Zweite Frage hätte ich, ist das id in der erste Zeile eine Zahl, die aus der Tabelle zurückkommen soll?
Ich habe noch 2 Spalten in meine Tabelle, aber ich weiss es nicht, ob das die Werte aus der TAbelle sein sollen???
Diese beiden Fragen kann ich dir auch nicht beantworten.
Zu dem ersten Punkt:
Ein Attribut (also "id" und "type") zu erzeugen geht bspw. so:
SELECT [Column1] as '@id' .....
Das müsstest du noch hiermit kombinieren: Zurückgeben von Ergebnissen innerer FOR XML-Abfragen als XML-Typinstanzen an äußere Abfragen
Dein bisheriger code wird dabei größtenteils die innere SELECT-Abfrage sein.
<v1:externeadresse> und die beiden Werte für "id" und "type" gehören in den äußeren Bereich der Abfrage.
“Knowledge cannot replace friendship. I'd rather be an idiot than lose you.”
@Anna85:
Nochmals, glaubst du nicht, dass es einfacher ist, wenn du dir erst einmal die absoluten Basics aneignest - dein Try and Error Prinzip wird dir nicht weiterhelfen. Du kopiert Code, den du nicht verstehst - dies ist nicht zielführend!
Hi, hast du volkomm Recht, ich kann zu Weiterbildung für eine Woche gehen, der Kurs startet im September, auch im Juli.
Leider ich habe Zeit bis nächste Woche Di, deshalb versuche ich das auf Basis von der Info, was ich hier bekomme meine Daten in der Schema zu bekommen.
Viele Grüße