使用SSIS包调度开发的包

时间:2022-03-23 16:35:11

在项目中,开发完自己的packages之后,需要使用agentjob之类的服务来调度自己的package,当然我们也可以使用一个package来调度这些,下面就是我的一个简单的尝试.

没有设计得像Agentjob那样复杂,agentjob中的每一个job都包含schedule,然后每一个job有若干个step,每一个step之间还是有依赖关系.

我的设计很简单,就是使用一个csv文件保存三列值,一列是order,一列是batfilename,第三列是isenabled.

分别表示执行顺序,batch file的名字,(其实也可以设计成包的路径)和是否执行.

示例如下:

   

使用SSIS包调度开发的包

我暂且就叫它MainFrame,它的基本结构如下:

使用SSIS包调度开发的包

   

除了执行之外,我还想获取执行过程中返回的信息,存储到一个文件中去,所以添加了一些变量,另外一个考虑是方便配置.

Step1.使用一个Dataflowtask读取csv文件的内容到一个recordset.

Step2.使用foreach loop组件遍历这个Recordset,然后分别进行处理.

如果isenabled是true,则就是需要执行的batch file.则使用Execute process task执行.

然后写入返回的结果即可.

Data flow task的内容如下:

使用SSIS包调度开发的包

Execute process task的配置如下:

使用SSIS包调度开发的包

最后一个script task的代码基本如下:

string _errorinfo=Dts.Variables["User::var_outputfile"].Value.ToString();

string _outputinfo= Dts.Variables["User::var_outputfile"].Value.ToString();

StringBuilder sbcontent = new StringBuilder();

sbcontent.Append("outputinfo:");

sbcontent.Append(_outputinfo);

sbcontent.Append(Environment.NewLine);

sbcontent.Append("errorinfo:");

sbcontent.Append(_errorinfo);

sbcontent.Append(Environment.NewLine);

File.AppendAllText(_filename,sbcontent.ToString());

全部流程没有经过完全的测试,可能需要稍微调整一些内容.

仅供学习参考.

我们还可以再添加一些有用的内容,譬如执行完成后发邮件通知等等.这样更方便.