0

我有一个 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 之外,还有什么建议或有更好的方法吗?

感谢您和我一起思考!

4

1 回答 1

1

PackageA您可以在 SSIS 中执行和PackageB或执行 SQL 任务之间的 T-SQL 作业步骤,以检查时间并使用WAITFOR语句等待到 19:00。

IF DATEPART(HOUR, SYSDATETIME()) >= 6 OR DATEPART(HOUR, SYSDATETIME()) < 18
BEGIN
    WAITFOR TIME '19:00';  
END;
于 2016-11-04T16:26:00.317 回答