从SSIS包中安排单个包

时间:2016-11-04 15:20:47

标签: tsql ssis sql-server-2014 ssis-2012 sql-agent

我有一个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())

如果找到的值<&lt; 6或&gt; 18,则正常&#39;程序执行或开始发送电子邮件&#39;并退出。 我想要的是在发送电子邮件后添加一个命令,该电子邮件将安排PackageB在当天晚上19:00运行一次。理想情况下,该过程将检查是否存在仅运行packageB的作业,并安排在晚上19:00运行一次并且如果没有 运行PackageB的工作应该创建。

我的感觉说使用TSQL这应该是可行的。除了使用TSQL之外,还有什么建议或更好的方法吗?

Thanx和我一起思考!

1 个答案:

答案 0 :(得分: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;