SQL Schleife, WÄHREND, WENN PAUSE

In einer SQL Server 2012-gespeicherte Prozedur, ich habe mehrere verschachtelte Strukturen. Ich will ausbrechen aus einer einzigen Schicht von Ihnen.

Dachte ich, die Beschreibung von BRUCH in der msdn https://msdn.microsoft.com/en-CA/library/ms181271.aspx war auf meiner Seite. Aber ich bin immer einige seltsame Verhalten während der Ausführung im single-step durch Debuggen. Ich sage seltsam, weil es nicht konsistent ist. Manchmal tritt es auf der Ebene erwarte ich auch.. manchmal ist es überspringt ein paar.

WHILE ... BEGIN
  stuff1
  IF...BEGIN
    stuff2
    WHILE ... BEGIN
      stuff3
      IF .... BEGIN
        stuff4
        IF @NumberRecords=0 BREAK
        stuff5
      END
      --stuff6
      if @NumberRecords=0 and @loopBOMRowCount=@ResultsSOloopstart-1 break
      --on the last occasion I observed, @loopBOMRowCount was 6 and @ResultsSOloopstart 71 and it never highlighted this section, either way

      SET @loopBOMRowCount = @loopBOMRowCount + 1
    END
    stuff7 --nothing actually here
  END
  --stuff8
  SET @periodloopcount=@periodloopcount+1 
  --this is where it ended up highlighting on that last occasion
END
stuff9

Also, wenn NumberRecords=0, dann ist die nächste op sollte sein das wenn bei stuff6, richtig? Auch wenn stuff4 umfasst, sagen wir, ein EINFÜGEN IN die Tabelle von einem EXEC-Aufruf an eine gespeicherte Prozedur? Nichts sollte in der Lage sein, zu verwirren, das der stack aus seinen Schichten?

Und ja, ich weiß, das ist hässlich SQL. Die meisten Anweisungen sind änderungen auf beiden temp-Tabellen und ich zu vermeiden, übergeben Sie hin und her, um gespeicherte Prozeduren, die sonst sauberen code.

BEARBEITEN

Habe ich es geschafft, um es an die route, die Art, wie ich gewünscht, durch hinzufügen einer dummy-WHILE-Schleife um das innere, WENN ich brechen will aus der ersten. Aber ich würde wirklich gerne wissen, wie ich bin falsch in dem msdn-info. Es scheint zu sagen, eine PAUSE ausbrechen sollte eine WENN, solange es eine END-Anweisung.

Beendet die innerste Schleife in eine WHILE-Anweisung oder IF...ELSE-Anweisung innerhalb einer WHILE-Schleife. Alle Aussagen, erscheint nach dem END-Schlüsselwort, markiert das Ende der Schleife ausgeführt werden.

AFAIK sollte es ausführen stuff7 nicht stuff6. BREAK bricht die Schleife ab. Aus der Dokumentation: Alle Aussagen, erscheint nach dem END-Schlüsselwort, markiert das Ende der Schleife ausgeführt werden.
So am ENDE, dass geht mit der WENN-vor der Pause - WENN nicht zählt? WENN x=0 PAUSE stuff5 ENDE stuff6
Sie vergessen zum zurücksetzen einer variable Wert, wenn die innere Kind-Schleife erfüllt ist, die für die nächste iteration der übergeordneten Schleife? Ein wenig schwer zu sagen, was Los ist, ohne diese conditiions
Ich war stützend meine Vermutung off: Beendet ... oder IF...ELSE-Anweisung innerhalb einer WHILE-Schleife (aus der msdn)
möglich, das ist, warum ich Debuggen, aber es würde nicht erklären (ich glaube nicht) gerade die debug-Zeile gehen aus der Hervorhebung der PAUSE (was ich erwartet hatte mit den Bedingungen zu diesem Augenblick) zur Hervorhebung der ersten Zeile der stuff8 Abschnitt, nachdem ich hit F11. Ich werde fügen Sie die Abschnitte in der Frage

InformationsquelleAutor Hsmith | 2015-12-15

Schreibe einen Kommentar