使用 WAITFOR
WAITFOR 语句挂起批处理、存储过程或事务的执行,直到发生以下情况:
已超过指定的时间间隔。
到达一天中指定的时间。
指定的 RECEIVE 语句至少修改一行或并将其返回到 Service Broker 队列。
实际的时间延迟可能随着指定的时间而变化,并取决于服务器的活动级别。时间计数器在计划完与 WAITFOR 语句关联的线程后启动。如果服务器忙碌,则可能不会立即计划线程;因此,时间延迟可能比指定的时间要长。
WAITFOR 语句由下列子句之一指定:
DELAY 关键字后为 time_to_pass,是指完成 WAITFOR 语句之前等待的时间。完成 WAITFOR 语句之前等待的时间最多为 24 小时。
在下面的示例中,执行 SELECT 语句之前使用 DELAY 关键字等待两秒钟:
WAITFOR DELAY '00:00:02'; SELECT BusinessEntityID FROM AdventureWorks2008R2.HumanResources.Employee;
TIME 关键字后为 time_to_execute,指定 WAITFOR 语句完成所用的时间。
下面的示例使用 TIME 关键字等到晚上 10 点 (22:00) 才执行 AdventureWorks 数据库检查,从而确保正确地分配并使用所有页:
USE AdventureWorks2008R2; GO BEGIN WAITFOR TIME '22:00'; DBCC CHECKALLOC; END; GO
RECEIVE 语句子句,从 Service Broker 队列检索一条或多条消息。使用 RECEIVE 语句指定 WAITFOR 时,如果当前未显示任何消息,该语句将等待消息到达队列。
后面带有 timeout 的 TIMEOUT 关键字将指定 Service Broker 等待消息到达队列的时间(毫秒)。可以在 RECEIVE 语句或 GET CONVERSATION GROUP 语句中指定 TIMEOUT。