Verwenden von WAITFOR
Mit der WAITFOR-Anweisung lässt sich die Ausführung eines Batches, einer gespeicherten Prozedur oder einer Transaktion anhalten, bis Folgendes eintritt:
Ein angegebenes Zeitintervall ist verstrichen.
Eine angegebene Uhrzeit wurde erreicht.
Eine angegebene RECEIVE-Anweisung führt zur Änderung oder Rückgabe von zumindest einer Zeile in eine Service Broker-Warteschlange.
Die tatsächliche Zeitverzögerung kann von der angegebenen Zeit abweichen und hängt von der Aktivitätsstufe des Servers ab. Der Zeitleistungsindikator startet, wenn der der WAITFOR-Anweisung zugeordnete Thread geplant wird. Wenn der Server ausgelastet ist, kann der Thread möglicherweise nicht sofort geplant werden. Deshalb ist die Zeitverzögerung möglicherweise länger als die angegebene Zeit.
Die WAITFOR-Anweisung wird mit einer der folgenden Klauseln angegeben:
Mit dem DELAY-Schlüsselwort, gefolgt von einer time_to_pass-Zeitspanne, die verstreichen muss, bevor die WAITFOR-Anweisung abgeschlossen wird. Die Wartezeit, bevor die WAITFOR-Anweisung abgeschlossen wird, kann bis zu 24 Stunden betragen.
Im folgenden Beispiel wird das DELAY-Schlüsselwort verwendet, damit zwei Sekunden gewartet wird, bevor eine SELECT-Anweisung ausgeführt wird:
WAITFOR DELAY '00:00:02'; SELECT EmployeeID FROM AdventureWorks.HumanResources.Employee;
Mit dem TIME-Schlüsselwort, gefolgt von einer time_to_execute-Ausführungszeit, die angibt, zu welchem Zeitpunkt die WAITFOR-Anweisung abgeschlossen wird.
Im folgenden Beispiel wird das TIME-Schlüsselwort verwendet, damit bis 22:00 Uhr (22:00) gewartet wird, um dann eine Überprüfung der AdventureWorks-Datenbank auszuführen, die sicherstellen soll, dass alle Seiten richtig zugeordnet und verwendet werden:
USE AdventureWorks; GO BEGIN WAITFOR TIME '22:00'; DBCC CHECKALLOC; END; GO
Mit einer RECEIVE-Anweisungsklausel, welche eine oder mehrere Meldungen aus einer Service Broker-Warteschlange abruft. Wenn WAITFOR mit einer RECEIVE-Anweisung angegeben wird, wartet die Anweisung, bis eine Meldung in der Warteschlange eintrifft, sofern dort aktuell keine Meldung vorhanden ist.
Mit dem TIMEOUT-Schlüsselwort, gefolgt von einem timeout, das die Zeitdauer (in Millisekunden) angibt, die Service Broker auf das Eintreffen einer Meldung in der Warteschlange wartet. TIMEOUT kann entweder in der RECEIVE-Anweisung oder in der GET CONVERSATION GROUP-Anweisung angegeben werden.
Siehe auch