Sql server 在无限循环中运行SQL代理作业

Sql server 在无限循环中运行SQL代理作业,sql-server,sql-agent-job,Sql Server,Sql Agent Job,有一个SQL代理作业,其中包含一个执行某些ETL作业的复杂集成服务包。根据我们的数据源,运行需要1到4个小时。 作业当前每天运行,没有问题。我现在想做的是让它在一个无休止的循环中运行,这意味着:当它完成后,重新开始 调度程序似乎没有提供此选项。我发现,在最后一步完成后,可以使用steps界面转到第一步,但使用该方法存在一个问题:如果我需要停止作业,我需要以强制方式进行。但是,我希望能够让作业在下一次迭代后停止。我该怎么做 提前感谢您的帮助 因此,当您想要停止作业时,在运行迭代之后,它应该停止—如

有一个SQL代理作业,其中包含一个执行某些ETL作业的复杂集成服务包。根据我们的数据源,运行需要1到4个小时。 作业当前每天运行,没有问题。我现在想做的是让它在一个无休止的循环中运行,这意味着:当它完成后,重新开始

调度程序似乎没有提供此选项。我发现,在最后一步完成后,可以使用steps界面转到第一步,但使用该方法存在一个问题:如果我需要停止作业,我需要以强制方式进行。但是,我希望能够让作业在下一次迭代后停止。我该怎么做


提前感谢您的帮助

因此,当您想要停止作业时,在运行迭代之后,它应该停止—如果我没有弄错的话

你可以在这里做一件事

  • 有一个具有布尔值的配置表
  • 在作业中添加一个步骤。i、 e.迭代前,检查表中的值。如果是真的,那么只运行ETL包
  • 所以,每一次它发现它的真实性,它都会遵循无休止的循环
  • 要停止作业时,请将表中的该值设置为false
  • 当当前作业迭代完成时,它将从表中查找值,发现值为false,迭代将停止
  • 你总是可以将“成功时”的动作设置为第一步,创造一个无休止的循环,但是正如你所说的,如果你想停止工作,你必须强迫它


    除此之外,数据库上还有一个简单的控制表,其中包含一个状态和一个查询该表并根据状态触发主作业的第二个作业。这里有几种可能的体系结构,只需选择一种更适合您的体系结构即可

    您可以在数据库中使用ServiceBroker。您需要运行的作业可以通过排队“开始”消息来启动,当它完成时,可以向自己发送一条消息以再次启动


    要暂停此过程,您只需停用队列处理器。

    因为Martin和Remus都没有创建答案,所以这里有一个答案,这样问题就可以被接受。 最好的方法是简单地将运行频率设置为一个非常低的值,比如一分钟。如果已在运行,则不会创建第二个实例。如果要在当前运行后停止作业,只需禁用计划即可


    谢谢

    如果您需要停止作业,编辑最后一步以不返回到步骤1然后等待是否真的很困难?只需将其安排为每分钟运行一次。如果它已经在运行,那么这不会导致该作业的第二个实例启动。只需以较高的频率安排该作业,例如每10分钟一次。如果作业已在运行,则不会重新启动它。如果没有运行,将重新启动。不知道它将以这种方式工作。这是一个简单但完美的解决方案。如果我想在下一次迭代后停止作业,我可以简单地禁用计划。非常感谢@MartinSmith或RemusRusanu-你们中的一位可以发布一个答案,这样我就可以接受了吗?