Announcement

Collapse
No announcement yet.

Verständnisfrage: interne Verarbeitung von Prozeduren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Verständnisfrage: interne Verarbeitung von Prozeduren

    SQL Server 7

    Hallo zusammen,

    über eine (Standard-)ASP Seite werden nacheinander zwei verschiedene Prozeduren aufgerufen. Die erste (SP1) soll bestimmte Werte löschen und die zweite (SP2) speichert einen vom User eingegebenen Wert.

    Innerhalb von SP1 werden in einer WHILE-Schleife (über einem CURSOR) n Aufrufe von SP2 durchgeführt (EXEC SP2 Parameter - Grund hierfür ist, dass beim Löschvorgang alle betroffenen Werte nicht wirklich gelöscht, sondern eben auf 0 gesetzt werden, was einer Speicherung eines neuen Wertes entspricht, was eben von SP2 übernommen wird).
    SP2 - wie gesagt - speichert dann den einen neuen Wert und legt noch Vorgangsinformationen in eine Log-Tabelle.

    Mein Problem ist wie folgt:
    Obwohl er beim Löschvorgang in SP1 mehr als 2 Werte auf 0 setzen müsste, macht er dies nur bei genau 2 Datensätzen. Die WHILE-Schleife scheint also nicht komplett durchzulaufen.
    Ich habe mal gelesen, dass die Prozeduren (ich weiß nicht, ob das für alle SQLServer Versionen gilt!?) nicht als Instanzen abgearbeitet werden, sondern "ineinander verschachtelt" (mir fällt kein besserer Ausdruck ein . Da in SP2 auch eine WHIEL-Schleife läuft und ich üblicherweise die Abbruchbedingung @@FETCH_STATUS = 0 verwende, dachte ich mir, dass das Erreichen des FETCH_STATUS = 0 in SP2 auch Auswirkungen auf die Abbruchbedingung in SP1 haben könnte. Also habe ich mir eine andere Abbruchbedingung über eine Zählervariable gebaut, allerdings ohne ein besseres Ergebnis zu erreichen.
    Führe ich beide Prozeduren nacheinander über den QA aus, läuft alles wie gewünscht. Er löscht alle Werte und legt den einen neuen Wert an.

    In ASP sind die Aufrufe also
    EXEC SP1 (dbCon.Execute())
    EXEC SP2 (über ein Recordset, weil hier ein Rückgabewert erwartet wird)

    Ein Beispiel für einen korrekten Ablauf der Prozeduren wäre z. B.
    SP1 (Aufruf aus ASP-Seite)
    WHILE (alle gefundenen Werte löschen)
    SP2 (Aufruf aus SP1 in WHILE)
    SP2
    ----- (hier wird abgebrochen)
    SP2
    SP2
    SP2 (Aufruf aus der ASP-Seite)

    Ich weiß nicht, wie der SQL-Server sowas intern verarbeitet und ob die Reihenfolgen der angeforderten Prozeduren eingehalten werden!? Irgendwie habe ich das Gefühl, als wenn nach dem 2. Durchlauf der WHILE der ASP-Aufruf von SP2 dazwischen funkt und die interne Verarbeitung, die in SP1 noch laufen müsste, unterbricht. Kann das sein?

    Tja, ich hoffe, mir konnte jemand folgen :P
    Kann jemand was damit anfangen und mir diese Verarbeitungsmisere erklären?

    Danke & Gruß,
    72
Working...
X