Announcement

Collapse
No announcement yet.

While-Schleife soll Ereignis starten

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

  • While-Schleife soll Ereignis starten

    Hallo,

    ich stehe hier völlig auf dem Schlauch. Eine WHILE-Schleife soll einen bestimmten Wert in einer anderen Datenbank überprüfen. Wenn in diesem Feld die Ziffer "1" steht, soll erst mal ein SELECT ausgeführt und ausgegeben werden. Das SELECT scheint hier an dieser Stelle aber nicht zu funktionieren.

    Mir ist bewusst, dass der Server permanent auf den Wert "Status1 = 1" prüft aber das ist erst mal nebensächlich.


    /* Wenn der Status der Tabelle ungleich 9 ist, gehe in die Schleife - das funktioniert */
    WHILE (SELECT Status1 FROM MeinZweiterServer.Datenbank.Tabelle) != 9

    /* Wenn der Status der Tabelle gleich 1 ist ... */
    BEGIN IF (SELECT Status1 FROM MeinZweiterServer.Datenbank.Tabelle) = 1

    /* ... soll der SELECT ausgeführt werden und die Schleife muss verlassen werden */
    SELECT * FROM MeinZweiterServer.Datenbank.Tabelle2

    /* Wenn der Status1 nicht 1 beträgt, soll die Schleife so lange durchlaufen, bis der Status 1 gesetzt wird */

    BREAK
    ELSE CONTINUE
    END

  • #2
    So wie das dasteht sieht es in gekürzter Form so aus:
    Code:
    while select != 9 begin
        if select = 1 select ...
        break
       else continue
    end
    Das bedeutet, dass das 'else continue' nie erreicht wird, da vorher IMMER das 'break' ausgeführt wird ...
    Also nix mit "Wenn der Status1 nicht 1 beträgt, soll die Schleife so lange durchlaufen, bis der Status 1 gesetzt wird"

    bye,
    Helmut

    Comment


    • #3
      Hallo,

      vielen Dank für deine Antwort. Könntest du mir einen Tipp geben, wie ich mein Problem lösen könnte?

      Viele Grüße

      Comment


      • #4
        Mir ist leider nicht ganz klar, was du eigentlich wirklich willst. Aber ich probiere mal einen Vorschlag, wobei ich annehme, dass Status1 ein integer ist:
        Code:
        declare @x int
        while 1 = 1 begin    -- eigentlich eine Endlos-Schleife ...
          select @x = 0   -- Initialisierung, falls Tabelle leer ist
          select @x = Status1 FROM MeinZweiterServer.Datenbank.Tabelle
          if @x = 9 break   -- Schleife beenden, wenn der Status1 = 9 ...
          if @x = 1 begin   -- irgendwas tun, wenn Status1 = 1 ...
             SELECT * FROM MeinZweiterServer.Datenbank.Tabelle2
             break   -- ... und Schleife beenden
          end
        end
        was mit dem "SELECT * FROM MeinZweiterServer.Datenbank.Tabelle2" jetzt weiter geschehen soll hast du uns ja nicht verraten ...
        Und wenn Status1 aus zwei verschiedenen Tabellen kommen sollte, dann war das aus deinen Angaben auch nicht ersichtlich und dieses Beispiel wird natürlich nicht funktionieren. Aber so ist das mal, je unklarer die Fragestellung umso ungenauer die Antworten

        bye,
        helmut

        Comment


        • #5
          Hallo, vielen Dank für deine Antwort ;-)
          Hier nochmals mein Anliegen, diesmal etwas ausformulierter:

          Es gibt einen Server S1 und einen Server S2. Der Server S1 soll permanent eine Tabelle (eigentlich nur ein int-Feld einer Tabelle) vom Server S2 abfragen. Wenn der Wert "1" im abgefragten Feld steht, soll ein Select ausgeführt werden und die Schleife wird erfolgreich verlassen.

          Mein Pseudocode:
          Frage das Feld "Status1" der Tabelle "Statustabelle" vom Server S2 ab.
          Wenn der "Status1" nicht den Wert 1 zurückliefert, frage erneut das Feld "Status1" ab => Schleife
          Wenn der "Status1" den Wert 1 zurückliefert, führe einen bestimmten Select einmal aus und beende die Schleife.


          Deinen Code habe ich getestet. Wenn x = 9 ist (oder einen anderen Wert bis auf 1 hat), soll die Schleife nicht beendet werden sondern wieder den Status abfragen und wieder und wieder bis die 1 zurückgegeben wird. (Mein Fehler, mein Code war falsch)


          Viele Grüße

          Comment


          • #6
            Dann brauchst du ja eigentlich nur die eine Zeile mit "if @x = 9 break" rauslöschen und das Ding tut, was du geschrieben hast. Allerdings würde ich darüber nachdenken, ein WAITFOR DELAY einzubauen, damit du den Server nicht mit deiner Abfrageschleife komplett zumachst!

            bye,
            Helmut

            Comment

            Working...
            X