2017-09-08 1 views

Antwort

1

Im allgemeinen ist der Code wie folgt aussieht

Create Proc test_act_sp 
AS 
BEGIN 
    WHILE (1=1) 
     BEGIN 
      WAITFOR 
      ( 
       RECIEVE TOP(1) ... FROM Queue 
      ) , TIMEOUT 3000; --Timeout value can be changed. 

      IF (@@ROWCOUNT = 0) 
      BEGIN 
       BREAK; 
      END 
     ........ 
     ........ 
     ........ 
    END 
END 

Die Aktivierungsprozedur startet Nachrichtenverarbeitung innerhalb Endlosschleife, und wenn es keine Nachrichten innerhalb timout Intervalls (3s in dem obigen Beispiel) wird empfangen, das Verfahren wird beendet werden.

Wenn ein Großteil der Nachrichten an die Warteschlange gesendet wird, wird die Aktivierungsprozedur einmal gestartet und für den gesamten Satz in den Speicher geladen (da auf die Nachrichten nach der Aktivierung gewartet wird) und wird 3 Sekunden nach dem Herunterfahren beendet zuletzt erhaltene Nachricht Daher reduziert die while-Schleife in diesem Fall den Overhead für den Server.

Es ist möglich, die Schleife auszulassen, aber in diesem Fall wird die Aktivierungsprozedur für jede Nachricht in der Warteschlange ausgelöst, was zu Leistungsproblemen führen kann.

0

Es muss ein boolean Ausdruck (somehting die wahr oder falsch ist) wie folgt gestaltet sein er WHILE, es ist die Syntax des Befehls.

Wenn Sie eine WHILE Schleife schreiben möchten, die unendlich weitergeht, müssen Sie einen Ausdruck schreiben, der immer wahr zurückgibt. 1=1 ist einer von ihnen, aber man kann alles schreiben, die immer wieder zurückkehren wahr (wie 0=0, 10=10)

1

Es hängt davon ab, ob Sie die Warteschlange kontinuierlich zu verarbeiten. Die (1=1) ist immer true und erstellt eine Endlosschleife, innerhalb der gewartet wird, bis ein Element in der Warteschlange angezeigt und verarbeitet wird.

Wenn Sie einen Aktivierungsprozess erstellen möchten, der nur ein einzelnes Element verarbeitet, benötigen Sie die Schleife gar nicht.

Verwandte Themen