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 BusinessEntityID FROM AdventureWorks2008R2.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 AdventureWorks2008R2;
    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.