我有一个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和我一起思考!
答案 0 :(得分:1)
您可以在PackageA
和PackageB
之间执行T-SQL作业步骤,或在SSIS中执行一个执行SQL任务,检查时间并使用WAITFOR语句等待到19:00
IF DATEPART(HOUR, SYSDATETIME()) >= 6 OR DATEPART(HOUR, SYSDATETIME()) < 18
BEGIN
WAITFOR TIME '19:00';
END;