Utilisation de WAITFOR

L'instruction WAITFOR suspend l'exécution d'un lot, d'une procédure stockée ou d'une transaction :

  • jusqu'à ce qu'un délai défini soit écoulé ;
  • jusqu'à ce qu'une heure définie soit atteinte.
  • Une instruction RECEIVE spécifiée modifie ou retourne au moins une ligne à une file d'attente Service Broker.

Le délai véritable peut varier par rapport à la durée spécifiée et il dépend du niveau d'activité du serveur. Le compteur de temps démarre lorsque la thread associée à l'instruction WAITFOR est planifiée. Si le serveur est occupé, la thread peut ne pas être planifiée immédiatement ; par conséquent, le délai peut être plus long que la durée spécifiée.

L'instruction WAITFOR est définie par une des clauses suivantes :

  • Le mot clé DELAY suivi de time_to_pass, laps de temps devant s'écouler avant de mettre fin à l'instruction WAITFOR. Ce laps de temps peut atteindre 24 heures.
    L'exemple suivant utilise le mot clé DELAY pour qu'un intervalle de deux secondes soit respecté avant l'exécution d'une instruction SELECT :

    WAITFOR DELAY '00:00:02'
    SELECT EmployeeID FROM AdventureWorks.HumanResources.Employee;
    
  • Le mot clé TIME suivi de time_to_execute qui précise l'heure de fin d'exécution de l'instruction WAITFOR.
    L'exemple suivant utilise le mot clé TIME pour que le système attende jusqu'à 22 heures (22:00) pour effectuer une vérification de la base de données AdventureWorks, afin de vérifier que toutes les pages sont correctement allouées et utilisées :

    USE AdventureWorks;
    GO
    BEGIN
        WAITFOR TIME '22:00';
        DBCC CHECKALLOC;
    END;
    GO
    
  • Une clause d'instruction RECEIVE, qui récupère un ou plusieurs messages à partir d'une file d'attente Service Broker. Lorsque l'instruction WAITFOR est spécifiée avec une instruction RECEIVE, cette dernière attend qu'un message arrive dans la file d'attente, s'il n'y en a encore aucun.

  • Le mot clé TIMEOUT suivi d'un timeout spécifie la durée, en millisecondes, pendant laquelle Service Broker attend qu'un message arrive dans la file d'attente. TIMEOUT peut être spécifié dans l'instruction RECEIVE ou dans l'instruction GET CONVERSATION GROUP.

Version Historique

5 décembre 2005

Nouveau contenu :
  • Des informations ont été ajoutées sur une variation potentielle du délai véritable en fonction de l'activité au niveau du serveur.

Voir aussi

Autres ressources

RECEIVE (Transact-SQL)
WAITFOR (Transact-SQL)
GET CONVERSATION GROUP (Transact-SQL)

Aide et Informations

Assistance sur SQL Server 2005