1、语法
WAITFOR {
DELAY 'time_to_pass'
| TIME 'time_to_execute'
| [ ( receive_statement ) | ( get_conversation_group_statement ) ]
[ , TIMEOUT timeout ]
}2、参数解释
2.1、DELAY参数:延时执行,最大可以延时24小时,time_to_pass等待的时间
DECLARE @star DATETIME = GETDATE()
SELECT [Id],[Name],[Sex] FROM [dbo].[User]
PRINT(CONVERT(VARCHAR(20),@star,120))
WAITFOR DELAY '00:00:05'
SELECT [Id],[Name],[Sex] FROM [dbo].[Customer]
PRINT(CONVERT(VARCHAR(20), GETDATE(),120))
-- 执行结果
-- (20 行受影响)
-- 2022-02-24 11:46:10
-- (17 行受影响)
-- 2022-02-24 11:46:15上述两个查询语句相隔的时间正好是5s
2.2、TIME参数:定时执行
DECLARE @star DATETIME = GETDATE()
SELECT [Id],[Name],[Sex] FROM [dbo].[User]
PRINT(CONVERT(VARCHAR(20),@star,120))
WAITFOR TIME '11:59:00'
SELECT [Id],[Name],[Sex] FROM [dbo].[Customer]
PRINT(CONVERT(VARCHAR(20), GETDATE(),120))
-- 执行结果
-- (20 行受影响)
-- 2022-02-24 11:58:55
-- (17 行受影响)
-- 2022-02-24 11:59:00从两个查询语句结果可以看到,第二语句是在WAITFOR TIME 设置的执行时间执行的,DELAY和TIME两个参数一定要使用正确,例如TIME如果设置的时间是过去的时间段,那边命令执行就要到第二天的这个点才能执行完毕了
说明:WAITFOR在一个命令中有效,即在一个命令中执行多个语句,在这些语句中插入了WAITFOR,这个命令的结果也要等WAITFOR执行完才会输出,不会因为等待把已执行语句就输出了