2016-11-04 72 views
0

我有一个SQL作业代理,它有两个作业步骤:PackageA和PackageB。 PackageB遵循PackageA,但PackageB不应该在06:00和18:00之间运行。 不幸的是,PackageA有时需要很长时间才会导致PackageB在6:00至18:00之间运行。 在PackageB中,我有一个约束+表达式来检查时间是否在06:00到18:00之间。如果是这样,PackageB会很好地退出,并向操作员发送一封电子邮件,提醒他/她重新安排PackageB。 但是,如果我可以重新安排软件包,事情会更好。从SSIS包内安排单个包

逻辑在PackageB:

ExpressionTask --> fills variable @Hour with datepart("Hh",GETDATE()) 

如果发现值是在执行< 6或> 18的“正常”过程或它启动一个“发送电子邮件”和退出。 我想在发送电子邮件后添加一个命令,该电子邮件将安排PackageB在当天晚上19:00运行一次。理想情况下,该过程将检查是否有工作只是运行packageB并安排在19:00晚上运行一次,如果没有运行PackageB的 作业,则应创建它。

我的感觉说这应该可以使用TSQL来实现。除了使用TSQL之外,还有其他更好的方法吗?

感谢Thanx!

回答

1

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

IF DATEPART(HOUR, SYSDATETIME()) >= 6 OR DATEPART(HOUR, SYSDATETIME()) < 18 
BEGIN 
    WAITFOR TIME '19:00'; 
END; 
+0

非常好的主意,会测试那个星期一 – Henrov