【问题标题】:Persist Data in SSIS for Next Execution将数据保存在 SSIS 中以供下次执行
【发布时间】:2015-05-28 20:28:32
【问题描述】:

自上次提取此数据以来,我只需要提取记录即可加载数据。没有日期字段可以将此信息保存在我的目标表中,因此我必须跟踪我上次提取的最大日期。问题是我看不到如何在 SSIS 中保存此值以供下次项目运行时使用。

我看到了这个: Persist a variable value in SSIS package

但这对我不起作用,因为有另一个进程可以清除和重新加载与我的进程分开的数据。这意味着我必须做的不仅仅是知道我的进程上次运行的时间。

我能想到的唯一解决方案是创建一个表,但是创建一个表来保存一个字段似乎有点多。

【问题讨论】:

  • 如果您没有将其存储在数据库中并且链接的“使用文件”(XML 或其他)策略不合适,那么您在运行之间持久化某些内容的选择非常有限。我想你可能会发疯并重写你的包源来设置一个内部变量。数据库中不易损坏的表似乎是与 SSIS 一起使用的不错选择。

标签: sql-server ssis sql-server-2012 ssis-2012


【解决方案1】:

这是很常见的事情。您创建一个存储包名称、开始时间、结束时间以及包是否失败/成功的执行表。然后,您可以拉取上次成功运行的执行的最大开始时间。

【讨论】:

    【解决方案2】:

    您不能在两次执行之间将任何内容保存在包中。

    您所说的是差异复制的一种形式,并且已经进行了很多次。

    对于差异复制,通常会在订阅者(读取数据的系统)或发布者(提供数据的系统)中存储某种状态,以记住您的状态。

    所以我建议你:

    1. 阅读差异复制设计模式
    2. 完全放心将数据写入表

    如果您最终拥有多个源系统或多个源表,则您的存储表将不会只有一条记录。想想看。前几天我回答了一个这样的问题 - 随着时间的推移,你会发现你会添加一些方便的东西,比如上次运行复制的时间、花费了多长时间、传输了多少记录等。

    Is it viable to have a SQL table with only one row and one column?

    【讨论】:

      【解决方案3】:

      TTeeple 和 Nick.McDermaid 是绝对正确的,如果可能的话,你应该听从他们的建议。

      但是,如果由于某种原因您无权写入执行表,您始终可以使用脚本任务将上次加载的日期读/写到您所在本地文件系统上的文本文件中正在运行 SSIS。

      【讨论】:

        最近更新 更多