【问题标题】:How to check for windows file transfer and start SSIS package?如何检查 Windows 文件传输并启动 SSIS 包?
【发布时间】:2013-09-30 09:12:14
【问题描述】:

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

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

感谢您的帮助 满足

【问题讨论】:

    标签: sql-server file ssis ssms file-exists


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      您可以做的另一个选择是使用执行 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; 
      

      【讨论】:

      • Brian,感谢您的帮助,它完美运行。我没有创建临时表选项,这个想法对我有用。我创建了脚本任务来检查文件是否存在,如果存在则继续进程,在我的进程结束时,我执行了你列出的第一个 EXEC。如果不存在,它将不会继续该过程并且不会在最后执行 EXEC 语句。所以我的工作仍然有效。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-08
      • 1970-01-01
      • 2014-11-15
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      • 1970-01-01
      相关资源
      最近更新 更多