我有一个 SQL 作业代理,它有两个作业步骤:PackageA 和 PackageB。PackageB 跟在 PackageA 之后,但 PackageB 绝不应该在 06:00 到 18:00 之间运行。不幸的是,PackageA 有时需要很长时间,导致 PackageB 在 6:00 到 18:00 之间运行。在 PackageB 中,我有一个约束 + 表达式来检查时间是否在 06:00 和 18:00 之间。如果是这样,PackageB 很好地退出并向操作员发送电子邮件,提醒他/她重新安排 PackageB。但是,如果我可以自行重新安排包裹,事情会好得多。
PackageB 中的逻辑:
ExpressionTask --> fills variable @Hour with datepart("Hh",GETDATE())
如果找到的值是 <6 或 >18,则执行“正常”过程或启动“发送电子邮件”并退出。我想要的是在发送电子邮件后添加一个命令,该命令将安排 PackageB 在当天晚上 19:00 运行一次。理想情况下,该过程将检查是否有仅运行 packageB 的作业并安排在当晚 19:00 运行一次,如果没有运行 PackageB 的现有作业,则应创建它。
我的感觉是使用 TSQL 应该是可行的。除了使用 TSQL 之外,还有什么建议或有更好的方法吗?
感谢您和我一起思考!