使用 WAITFOR

WAITFOR 语句挂起批处理、存储过程或事务的执行,直到发生以下情况:

  • 已超过指定的时间间隔。
  • 到达一天中指定的时间。
  • 指定的 RECEIVE 语句至少修改一行或并将其返回到 Service Broker 队列。

实际的时间延迟可能随着指定的时间而变化,并取决于服务器的活动级别。时间计数器在计划完与 WAITFOR 语句关联的线程后启动。如果服务器忙碌,则可能不会立即计划线程;因此,时间延迟可能比指定的时间要长。

WAITFOR 语句由下列子句之一指定:

  • DELAY 关键字后为 time_to_pass,是指完成 WAITFOR 语句之前等待的时间。完成 WAITFOR 语句之前等待的时间最多为 24 小时。
    在下面的示例中,执行 SELECT 语句之前使用 DELAY 关键字等待两秒钟:

    WAITFOR DELAY '00:00:02'
    SELECT EmployeeID FROM AdventureWorks.HumanResources.Employee;
    
  • TIME 关键字后为 time_to_execute,指定 WAITFOR 语句完成所用的时间。
    下面的示例使用 TIME 关键字等到晚上 10 点 (22:00) 才执行 AdventureWorks 数据库检查,从而确保正确地分配并使用所有页:

    USE AdventureWorks;
    GO
    BEGIN
        WAITFOR TIME '22:00';
        DBCC CHECKALLOC;
    END;
    GO
    
  • RECEIVE 语句子句,从 Service Broker 队列检索一条或多条消息。使用 RECEIVE 语句指定 WAITFOR 时,如果当前未显示任何消息,该语句将等待消息到达队列。

  • 后面带有 timeout 的 TIMEOUT 关键字将指定 Service Broker 等待消息到达队列的时间(毫秒)。可以在 RECEIVE 语句或 GET CONVERSATION GROUP 语句中指定 TIMEOUT。

版本 历史记录

2005 年 12 月 5 日

新增内容:
  • 添加了有关根据服务器级活动的不同,实际时间延迟潜在变化的信息。

请参阅

其他资源

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

帮助和信息

获取 SQL Server 2005 帮助