我正在开发一个系统,该系统会生成许多定期电子邮件,作为 SQL Server 代理中计划的各种作业的一部分。这些电子邮件包含基于文本的报告,这些报告与他们的工作主题松散相关,但不依赖于工作的结果。当客户请求更改报告或分发列表的内容时,可能很难找到负责生成电子邮件/报告的特定工作/步骤。
为了使这些任务的维护更容易,我想创建一个新的中央作业并将每个电子邮件/报告步骤移动到该作业中。我会将作业的每个步骤配置为“退出作业报告成功”。我会为作业中的每个步骤配置一个唯一的时间表,以便继续按照正常的时间表生成电子邮件/报告。例如,第 1 步将在每天早上 7 点运行。第 2 步将在周六和周日中午运行。等等。
当我去创建一个时间表时,我无法找到一种方法来指定从哪个步骤开始。我知道msdb.dbo.sp_start_job
接受一个@step_name
参数。同样,SQL Server 代理允许我在通过 UI 手动启动作业时选择一个开始步骤。有没有办法从计划中指定开始步骤,或者我是否仅限于从作业中列出的配置(默认)开始步骤开始?
计划不依赖于作业。实际上,调度是一个可以被多个作业使用的共享资源。
没有所谓的“本地”时间表。当然,没有什么能阻止你使用时间表只做一份工作。
即,在代理体系结构中没有安排启动某个工作步骤的时间表。
所以,是的,您仅限于在作业中定义的步骤开始作业。
按照我阅读您的场景的方式,这些步骤之间没有任何共同点,只是它们共享您的应用程序的相同子系统(或者您会用它来表达它)。我希望代理能够为作业提供一些命名空间/文件夹功能,但没有。IMO,您最接近的是为您的工作制定一个健康的命名标准,在工作名称中使用一些前缀来标识每组工作属于哪个系统。当然,还有工作内部的评论。
附表是独立实体。我们无法将其与作业步骤进行映射。但是您可以通过其他几种方式实现您的目标。
创建另一个作业并有一个步骤来运行您所需的作业,如下所示。并根据您的意愿安排。
作为工作步骤的一部分,检查当前日期和时间,根据需要运行或跳过该代码。