Antworten auf deine Fragen:
Neues Thema erstellen

[SQL-Server] While Schleife mit Transact-SQL

didi01

Aktives Mitglied

Hallo zusammen,

Über eine Stored Procedure soll eine Abfrage ausgeführt werden, die im ersten Schritt die Artikel heraussucht, die im Stammsatz als Dispoartikel gekennzeichnet sind.

Während diese Schleife abgearbeitet wird und die Artikel-ID liefert, sollen innerhalb der Schleife zwei weitere Abfragen sattfinden.

1. Von der gefundenen Artikel-ID die Summe der Anliefermenge
SELECT @sum_we = SUM(anlieferung.menge) FROM anlieferung WHERE artikel-ID = @Artikel-ID

2. Von der gefundenen Artikel-ID die Summe der Warenausgänge
SELECT @sum_wa = SUM(lieferschein.menge) FROM lieferschein WHERE artikel-ID = @Artikel-ID

3. Von den beiden gefundenen Summen soll eine Differenz errechnet werden.
@diff = @sum_we - @sum_wa

Wie ich eine Stored Procedure mache und die Werte aus verschiedenen SQL Abfragen zeitgesteuert mit dem Enterprise Manager in eine Tabelle abspeichere ist kein Problem, was ich nicht hinbekomme ist, die WHILE Schleife zu schreiben, die mir die Atikel-ID liefert, womit ich dann innerhalb der WHILE Schleife weitere Aktionen (sh. Punkt 1, 2 und3) durchführen kann.

Laut Doku ist der Rückgabewert der Schleife ein Boolean (true or false) was meine Abfrage natürlich nicht liefert.

Meine Frage ist nun wie bekomme ich die einzelnen Artikel-ID's gefiltert und dann mit den oben genannten Anweisungen weiterverarbeitet.

Der SQL-Server ist die Version 2003.

Vielen Dank für Eure Hilfe im Voraus.

Gruß
didi01
 

Duddle

Posting-Frequenz: 14µHz

AW: [SQL-Server] While Schleife mit Transact-SQL

Gewöhne es dir an, immer stutzig zu werden, wenn du "Schleife" und "SQL" im gleichen Satz sagst. Datenbanken arbeiten mit Mengen und deren Relationen zueinander. Das Konzept der Schleife hat in diesem Kontext keinen Platz. Gleiches gilt in der Regel auch für jegliche andere Programmlogik.

SQL ist eine Abfragesprache, keine Programmiersprache o.ä. Du fragst den Server nach einem Ergebnis, dass bestimmte Bedingungen erfüllt.

Kurz gesagt: du brauchst keine Schleife und solltest auch nicht nach einer Lösung damit suchen. Du solltest dir lieber die Grundlagen von SQL aneignen (da gibt es so viele sofort auffindbare Tutorials, ich werde nichtmal selbst Google ansteuern), dann kannst du diese Abfrage relativ sauber selbst schreiben.

Für meine Variante von SQL sieht das ungefähr so aus:
Code:
SELECT 
     artikelid, 
     (sumAnlieferung-sumLieferschein) AS differenz 
FROM 
     (SELECT 
           a.artikel AS artikelid, 
           l.artikel, 
           ifnull(sum(a.menge),0) AS sumAnlieferung, 
           ifnull(sum(l.menge),0) AS sumLieferschein
      FROM 
           anlieferung AS a 
      LEFT JOIN 
           lieferschein AS l 
      ON 
           a.artikel=l.artikel 
      GROUP BY
           a.artikel
     );

Vielleicht musst du in TSQL noch ein bisschen was anpassen o.ä., aber der Ansatz bleibt der gleiche. Wenn du irgendwas von dem Beispiel nicht verstehst, solltest du wie vorgeschlagen an deinen SQL-Grundlagen arbeiten.


Duddle
 

didi01

Aktives Mitglied

AW: [SQL-Server] While Schleife mit Transact-SQL

Hi,
vielen Dank für Deinen Hinweis, ich es am Montag wenn ich wieder im Büro bin mal ausprobieren.

Gruß
didi01
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.066
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben