2017-10-11 98 views
2

首先要做的事情。我对SSIS完全陌生,并试图找出它在ETL方面的潜力,并最终转向SSAS。我有以下情形:SSIS - 使用ODBC SQL执行任务将参数导入要导入的结果集

  1. 我有一个InterSystems的数据库,我可以通过ADO .NET
  2. 我想从这个数据库中提取数据,并通过增量加载使插入到MS SQL连接

我建议的解决方案/目标是:

  1. 在MS SQL中有存储最后指针读取或日期/时间快照的表。 (在这个阶段不合适)。让我们保持简单并说我们要使用Intersystems数据库中存在的记录ID从此表中获取指针并通过ODBC将其用作参数来读取源数据库,然后插入到目标MS中SQL db
  2. 更新指针,读取最后一条记录,以便下一次我们从那里继续。 (我并不想进入更新/删除的并发症,让我们保持它的简单。)

迄今取得的进展:

  1. 我必须成功,以与MS SQL连接读取从那里指针,并将其放置在一个变量
  2. 我设法用参数来读取InterSystems的DB数据使用[Execute SQL task],我把那到使用FullResultSet
  3. 我已成功使用使用[ForEach Loop Container]变量[Foreach ADO Enumerator]要通过每个记录和每个字段(yeeeey!)

现在。我可以使用[Script task],它使用VB.NET代码(理论上)插入MS SQL数据库,然后使用从源数据库读取的最后一条记录更新计数器。我花了无数时间寻找使用ODBC参数的解决方案,以上是我看到工作的唯一方法。

我的问题是这样的:

这是唯一的途径和最佳实践?是不是有一些简单的方法,我可以将这个结果集插入一些数据流组件,这些组件为插入和更新记录指针给我?

请假定我没有权限访问Intersystems Db,因此我无法对表结构进行任何更改。但我只能读取数据,以便将其放入MS SQL中。

在给你们(或加仑?)

+0

你应该为u唱一个数据流而不是执行sql到一个变量中,并在foreach中逐行处理。我将在下面的回答中加以解释 – KeithL

+0

您正在寻找[集成系列阶梯,第4级更新增量装载行](http://www.sqlservercentral.com/articles/Stairway+Series/76390/) – billinkc

回答

0

我建议使用一个数据流,以提高你的两个效设计(散装VS排在脚本行)和易用性(无需编写脚本) 。

  1. 您应该使用执行SQL来获取指针并将其保存到变量中。
  2. 你应该使用动态sql和上面的变量来构建一个sql变量。
  3. 请在管理数据连接到源
  4. 添加一个数据流,并进入它
  5. 从弹出
  6. 添加源管理器和选择信号源选择从变量SQL和选择你的变量

此时,您应该拥有所需的所有数据,并且可以继续转换或直接加载到目标。

编辑:记录指针部分

  • 增加组播(这使得尽可能多的拷贝,只要你想)
  • 添加聚合对象和max(无论您的指针)
  • OleDBSQL对象(支持实时SQL,主要用于更新
  • 9A。UPDATE “YourPointerTable” SET “PointerField在DB”=?(?其实就是你需要输入的内容。

    9b。地图,无论你在步骤命名8

    这将允许您处理插入/更新

  • 从组播流的新流,以查找对象,并映射你的钥匙目标表的
  • 指定没有匹配的关键重定向到无匹配输出
  • 你的比赛映射到一个UPDATE
  • 你没有匹配的映射到一个插入
  • +0

    KeithL - “我会建议使用数据流来改进你的设计”。这是我第一次尝试。但是发现数据流中的ODBC数据源不支持参数。没有选择,如果你放?它会在'解析'sql查询时出错。这就是为什么我选择了“执行SQL任务”来获取数据,因为它是唯一支持参数的选项。 – user7414160

    相关问题