Utilizzo di WAITFOR

L'istruzione WAITFOR sospende l'esecuzione di un batch, una stored procedure o una transazione. L'esecuzione viene quindi ripresa:

  • Dopo l'intervallo di tempo specificato.

  • Quando viene raggiunta l'ora del giorno specificata.

  • Un'istruzione RECEIVE specificata modifica o restituisce almeno una riga a una coda di Service Broker.

Il ritardo effettivo può variare rispetto al periodo di tempo specificato e dipende dal livello di attività del server. Il contatore del tempo viene infatti avviato al momento della pianificazione del thread associato all'istruzione WAITFOR. Se il server è occupato, è possibile che il thread non venga pianificato immediatamente. Il ritardo, pertanto, può risultare più lungo dell'intervallo di tempo specificato.

L'istruzione WAITFOR viene formulata con una delle clausole seguenti:

  • La parola chiave DELAY seguita da un valore time_to_pass relativo al periodo di tempo che deve trascorrere prima di completare l'istruzione WAITFOR. Il periodo di attesa che precede il completamento dell'istruzione WAITFOR non deve superare le 24 ore.

    Nell'esempio seguente viene utilizzata la parola chiave DELAY per impostare un periodo di attesa di due secondi prima dell'esecuzione di un'istruzione SELECT:

    WAITFOR DELAY '00:00:02';
    SELECT EmployeeID FROM AdventureWorks.HumanResources.Employee;
    
  • La parola chiave TIME seguita da un valore time_to_execute che specifica l'ora in cui l'istruzione WAITFOR viene completata.

    Nell'esempio seguente viene utilizzata la parola chiave TIME per impostare l'attesa fino alle 22:00 e quindi eseguire un controllo del database AdventureWorks per verificare che tutte le pagine siano allocate e utilizzate correttamente:

    USE AdventureWorks;
    GO
    BEGIN
        WAITFOR TIME '22:00';
        DBCC CHECKALLOC;
    END;
    GO
    
  • Una clausola dell'istruzione RECEIVE che recupera uno o più messaggi da una coda di Service Broker. Se viene specificata WAITFOR con un'istruzione RECEIVE, l'istruzione rimane in attesa di un messaggio nella coda, se non ne è già presente uno.

  • La parola chiave TIMEOUT seguita da un valore timeout specifica l'intervallo di tempo in millisecondi per il quale Service Broker rimane in attesa della ricezione di un messaggio nella coda. È possibile specificare la parola chiave TIMEOUT nell'istruzione RECEIVE o nell'istruzione GET CONVERSATION GROUP.