我已经知道如何使用 来安排每月的工作SQL Server Agent > Jobs
,我现在想学习如何使用 T-SQL 来安排这样的工作。
我知道如何每天在特定时间安排工作:
CREATE PROCEDURE MyTask
AS
BEGIN
SET NOCOUNT ON;
-- Now is set to run evry day at 23:00
-- But I need to run it every 1th of the month
declare @delayTime nvarchar(50)
set @delayTime = '23:00'
while 1 = 1
begin
waitfor time @delayTime
begin
-- Here the query I want to run every month
select * from AdventureWorks2012.dbo.AWBuildVersion;
end
end
END
-- Sets stored procedure for automatic execution.
sp_procoption @ProcName = 'MyTask',
@OptionName = 'startup',
@OptionValue = 'on'
在此Microsoft 指南中,我看到我可以使用@freq_type = 16
,但我不知道如何设置它,非常感谢您提供一个示例
要安排一个作业每月运行一次,在这种情况下是第一天的午夜:
在您的问题中,您引用
sp_procoption
. 该命令的文档状态(突出显示我的):这与您发布的引用sp_add_schedule的其他链接无关(突出显示我的):
创建一个可供任意数量的作业使用的计划。
虽然您可以修改现有代码以将其
waitfor
放入 while 循环并检查日期是否为 1(每月的第一天),但您的过程仅在 SQL Server 实例启动时执行。如果您不经常重新启动 SQL Server 实例,那么这种方法将有问题且不可靠。如果您想要一种相对可靠的方式来运行存储过程以每月运行一次,您需要创建一个每月计划的 SQL Server 代理作业,或者您可以使用 Windows 任务计划程序并让它每月运行一次。