根据其他包的状态执行SQL Server代理作业/包

时间:2014-09-25 18:08:44

标签: sql-server-2008 ssis package sql-agent-job

我是SSIS的新手,我想自动化我的一些工作流程。但是,我的大多数任务都要求SQL Server作业代理中的其他作业/包以前已由其他团队成员运行一天/一周。我的问题是:如何根据这些其他软件包的状态来指导我的工作流程?控制流没有条件分割工具,我无法从数据流启动单独的作业/包。我可以轻松地编写一个SQL语句来确定是否已经运行了任何或所有相关的包,甚至在需要时返回一个布尔值,但是我不知道如何将这个工作流指向要么进行下一步,要么在整个包裹失败的情况下,如果其他任何一个包没有运行(想要的结果)。

我非常感谢这方面的任何帮助。谢谢!

1 个答案:

答案 0 :(得分:2)

在SSIS中:

您可以通过双击将一个任务链接到另一个任务的箭头来设置控制流中的条件。如果设置执行SQL任务以运行查询以检查包是否已运行然后将结果返回到变量,则可以设置条件以检查该变量,并且只有在它继续时才继续执行下一个任务(或者不是)某个值。

这是一个如何设置优先约束的示例,以便下一步只有在前一个步骤成功时才会发生,并且特定变量的值也不是C:

Precedence constraint example

在SQL Server代理中:

您还可以 - 如果您想避免运行整个软件包 - 请在SQL Server代理作业中设置一些内容。您可以添加一个初始步骤来检查包的状态,然后退出作业报告成功。这确实意味着如果步骤由于其他原因而失败(比如它试图运行select语句的数据库已经关闭),它仍然会退出并报告成功,所以要小心 - 你可能想要设置一些其他具体步骤首先检查这种情况。

这是我之前用过的一篇文章,当时我想了解如何以这种方式设置SQL Server代理作业: http://sqlactions.com/2012/08/05/how-to-create-custom-schedule-for-sql-server-agent-job/