Create Proc test_act_sp
AS
BEGIN
WHILE (1=1)
BEGIN
WAITFOR
(
RECIEVE TOP(1) FROM Queue
)
........
........
........
END
END
Antwort
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.
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
)
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.
- 1. MotionEvent.getPointerCount() ist immer 1
- 2. hitTest.RowIndex ist immer -1
- 3. 2 oneOf in JSON-Schema: 1 erforderlich 1 optional
- 4. Range.Replace ist immer wahr für Chr (1)
- 5. Metaprogrammierung mit gespeicherten Prozeduren?
- 6. Ausnahmemanagement in gespeicherten Prozeduren?
- 7. Die Kartenansicht ist immer -1
- 8. Ruby Tutorial zum Schreiben von gespeicherten Prozeduren für PostgreSQL?
- 9. Warum ist hasLayout immer -1?
- 10. warum immer Rang 1 ist?
- 11. Können wir zwischen zwei gespeicherten Prozeduren in SQL Server beitreten
- 12. MIDIPacketList, numPackets ist immer 1
- 13. Angular 1 Versprechen im Service
- 14. Fehler 1064 in gespeicherten Prozeduren
- 15. Während scanf! = EOF oder scanf == 1?
- 16. Optionale Parameter in gespeicherten Prozeduren in MySQL schreiben?
- 17. wo mächtiger ist, im 1 Maschine für 1 Server oder 1 Maschine für multy VM
- 18. Vorteile für Ansichten in gespeicherten Prozeduren
- 19. 2 ES-Cluster oder 1
- 20. Zwei verschiedenes Ergebnis für "1" + "1" & "1" - - "1" in Javascript
- 21. Warum strlen() immer 2 oder 1 zurückgibt?
- 22. Wann müssen wir Service in Angular erstellen?
- 23. Set 1 IP für jeden Docker-Service
- 24. Cookie maxAge immer -1
- 25. layoutmanager.FindFirstCompletelyVisibleItemPosition liefert immer -1
- 26. Zwei Threads und 1 Service oder ein Service pro Thread?
- 27. Warum ist '[f x [1]]' unggrammatisch während '[1 + x [1]]' ist?
- 28. Android JobScheduler funktioniert immer für 1 Minute
- 29. [MATLAB]: Das Schreiben von Daten in Excel zurückgeben immer 1
- 30. Throwing Exceptions in gespeicherten SQL-CLR-Prozeduren