1

我是 SSIS 开发的新手。文件接收到服务器后,我需要运行 SSIS 包。我正在执行以下步骤: 1. 首先创建了我的 SSIS 包,其中包含脚本任务以检查文件是否存在。如果存在,它将继续包中的后续步骤。2. 创建 SSMS 计划作业以每 10 分钟(重复)启动 SSIS 包以查看文件是否可用。因为没有特定的时间将该文件传输到服务器。因此,这项工作安排在 2 小时窗口内,并且在该时间窗口内每 10 分钟启动一次 SSIS 包。

我的问题是一旦可用的文件 SSIS 完成该过程,那么如何停止再次启动 SSIS 包?如何告诉 SSMS 包已经执行完毕?

感谢您的帮助

4

2 回答 2

0

我喜欢 billinkc 的想法,尽管我通常反对扩展存储过程(它们不是有点 SQL Server 2000ish 吗?)。我会为文件存在一个 CLR 函数(就像 这个程序集中的函数)。

您可以做的另一个选择是使用执行 SQL 命令在包末尾(加载文件后)禁用该作业。

EXEC msdb.dbo.sp_update_job @job_name='Your job name',@enabled = 0; 

当然,您需要安排一个作业以在下一个窗口开始之前启用该作业。

EXEC msdb.dbo.sp_update_job @job_name='Your job name',@enabled = 1; 
于 2013-09-26T01:54:15.007 回答
0

我懒惰的方法是更新您的代理工作。第 1 步是一个 sql 任务。步骤 2 运行 SSIS 包。

SQL 作业步骤将执行查询xp_FileExists以检查传输文件是否存在。

如果未找到该文件,则让作业从现在开始重新安排 10 分钟,然后退出报告成功。

如果找到该文件,则转到步骤 2(运行 SSIS 包)。

如果您想将所有逻辑放在 SSIS 中,那么您需要进行一些修改以表明您找到了该文件并已对其进行处理。那是什么,取决于你手头有什么。也许您创建了一个哨兵文件,该文件在作业成功处理文件时创建(或销毁)。也许您将其记录到专用表中。也许你制作了一个注册表项。没有限制,只需选择已经为您的环境建立模式的东西,或者如果您正在开拓新领域,请选择那些支持它的人在您可以处理之后的东西。即,如果您周围没有人了解如何使用它,请不要将事件记录到服务代理队列。

于 2013-09-25T05:24:48.260 回答