2015-05-28 17 views
0

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

我看到这一点: Persist a variable value in SSIS package

但因为另一个过程,清洗和重新加载数据从我的过程中分离它不会为我工作。这意味着我不得不做更多的事情,而不仅仅是知道我的流程最后一次运行。

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

+1

如果您没有将其存储在数据库中,并且链接的“使用文件”(XML或其他方式)策略是不可接受的,那么您在两次运行之间持续存在的选择是相当有限的。我想你可能会变得疯狂并重写你的包源代码来设置一个内部变量。数据库中的表格不容易被损坏,这对于SSIS使用来说似乎是一个不错的选择。 – DaveE

回答

1

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

0

在执行过程中,您不能在包中保留任何内容。

你在说什么是一种差异复制的形式,这已经做了很多次。

对于差异复制,在用户(系统读取数据)或发布者(提供数据的系统)中存储某种状态是正常的,这些状态可以记住您所要达到的状态。

所以我建议你:

  1. 阅读上差异复制设计模式
  2. 绝对把你的心在休息约将数据写入表

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

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

0

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

但是,如果由于某种原因,您无权写入执行表,您可以随时使用脚本任务将上次加载日期读取/写入任何本地文件系统上的文本文件系统,重新运行SSIS。