anna85
Goto Top

Schleife zu eine MSSQL Abfrage einbauen

Hallo,

ich bin nach der Suche von einem Anleitung/Benutzerhandbuch, wie ich eine Schleife in meine Abfrage einbauen kann.

Ich kann nicht programmieren, ich kann nur einfache Abfragen in MSSQL bauen.
Es ist mir aufgefallen, dass ich eine Schleife bauen möchte, die über mehrere Tabelle laufen wird.

Es ist nur das Problem, dass ich nicht weiss, wie ich das machen soll. Ich habe gesucht nach: Programmieren mit MSSQL etc, aber leider nichts gefunden. Hat jemand vielleicht ein gutes Tutorial?

(Ich habe eine Abfrage und über die Abfrage muss eibe Schleife mit Zähler eingebaut werden).

Mit besten Grüßen
Anna

Ich habe folgende Abfrage:


[code] select

orga.ref.value('declare namespace marc21="http://www.loc.gov/MARC21/slim"; marc21:controlfield[1]','varchar(255)') controlfield,
data245.ref.value('declare namespace marc21="http://www.loc.gov/MARC21/slim"; marc21:subfield[@code = "a"][1]','nvarchar(255)') test,
data245.ref.value('declare namespace marc21="http://www.loc.gov/MARC21/slim"; marc21:subfield[@code = "b"][1]','nvarchar(255)') test2,
from (
Select Top 1 xmlData

FROM tab1

) xml
cross apply xml.xmlData.nodes('declare namespace marc21="http://www.loc.gov/MARC21/slim"; marc21:collection/marc21:record') as orga(ref)
cross apply orga.ref.nodes('declare namespace marc21="http://www.loc.gov/MARC21/slim"; marc21:datafield[@tag="245"]') data245(ref)
[code]

Als Ergebnis kommen Daten aus eine xml Datei im Form vor eine Tabelle. Nun habe ich ca 100 solchen XML Dateien, die ich auf dem Art und Weise ablesen muss. Deshalb möchte ich vorne eine Fuktion/Schleife einbauen, die durch die alle Dateien geht und liest die Daten ab.

Ich werde mich über jede Antwort freuen.

Content-ID: 512762

Url: https://administrator.de/forum/schleife-zu-eine-mssql-abfrage-einbauen-512762.html

Ausgedruckt am: 22.12.2024 um 09:12 Uhr

ukulele-7
Lösung ukulele-7 08.11.2019 um 09:37:36 Uhr
Goto Top
Schleifen sind in SQL immer das was man vermeiden sollte, auch wenn das manchmal nicht geht. XML ist aber sehr speziell und leider habe ich nur in MSSQL schon mit XML gearbeitet aber was du suchst ist ein Weg mehrere XML Dateien mit (idealerweise) einer Abfrage zu öffnen. Mal auf die Schnelle gesucht: https://community.talend.com/t5/Design-and-Development/Load-multiple-XML ...

Du hast ja schon gelöst markiert, welchen Weg hast du genommen?
Anna85
Anna85 08.11.2019 um 10:03:41 Uhr
Goto Top
Guten Morgen, das ist das gleiche Aufagbe, wie meine: fast.
Ich muss mehereren xml Dateien, gleich aufgebaute, auslesen.
Nun, weiss ich nicht, wie ich das dem MS SQL Programm sagen soll face-smile
ukulele-7
ukulele-7 08.11.2019 um 10:13:34 Uhr
Goto Top
Was denn nun, nutzt du MySQL oder MSSQL? Ich habe wie gesagt mit MSSQL schon XML gemacht, mit MySQL noch nie und das unterscheidet sich nunmal recht deutlich.
Anna85
Anna85 08.11.2019 um 10:27:03 Uhr
Goto Top
Ich habe mich vertippt MSSQL Server nutze ich!
ukulele-7
ukulele-7 08.11.2019 um 11:26:01 Uhr
Goto Top
Okay ein wichtiger Unterschied, CROSS APPLY scheint in MySQL auch nicht zu gehen.

Das im ersten Post gezeigte Query müsste aber auch mit mehreren Datensätzen laufen, wenn du z.B. mal von TOP 1 auf TOP 2 wechselst sollten Daten aus mehreren XML Datensätzen zurück gegeben werden.
Anna85
Anna85 08.11.2019 um 11:34:32 Uhr
Goto Top
Ja, das stimmt! wenn ich Top 3 eintragen, dann habe ich anstatt 1000 , 3000 Datensätze, da die Abfrage aus 3 XML Dateien (die sich in tab1 befinden)die Daten holt.
Grund: Die eine Datei war zu groß, deshalb habe ich die große XML Datei in kleine Dateien gemacht, es sind über 100 xml Dateien.
Da es über 100 Dateien enstanden sind, möchte ich folgendes bauen:
Die Abfrage soll über die alle Dateien durchgehen, die sich in tab1 (100 xml Dateien) befinden um die bestimmte Daten holen. Alle XML dateien sind gleich aufgebaut.

Habe ich das verständlich geschrieben?
ukulele-7
ukulele-7 08.11.2019 um 12:44:33 Uhr
Goto Top
Sollte gehen, machst du ja im Prinzip schon mit 3 Datensätzen. Wie genau ist den tab1 aufgebaut? Hier gibt es vermutlich alle betroffenen Datensätze mit dem zugehörigen XML-Datensatz in der Spalte "xmlData" und eine ID. Die ID würde ich mit ausgeben wollen.
Anna85
Anna85 08.11.2019 um 13:25:54 Uhr
Goto Top
hi, es geht auch, aber das sind ganze Menge von Daten. Ich habe die Abfrage augeführt und anstatt 1 habe ich alle: 117 Tabellen eingetragen und die Abfrage läuft seit 10 Minuten und ist noch nicht fertig.

Deshalb wollte ich so eine Abfrage vorne einbauen, die durch die Dateien geht und für jede xml Datei eine extra Tabelle erstellt.
Viele Grüße
ukulele-7
ukulele-7 18.11.2019 um 08:46:28 Uhr
Goto Top
Dann würde ich zu einem Cursor raten und den durchlaufen, immer mit je einem Datensatz der Tabelle. Der Cursor ließt die Tabelle einmal und geht alle Datensätze durch. Mit BEGIN TRY END TRY BEGIN CATCH END CATCH lassen sich noch Fehler abfangen falls die XML Syntax mal kaputt ist.