SSIS - 使用ODBC SQL执行任务将参数导入要导入的结果集
首先要做的事情。我对SSIS完全陌生,并试图找出它在ETL方面的潜力,并最终转向SSAS。我有以下情形:SSIS - 使用ODBC SQL执行任务将参数导入要导入的结果集
- 我有一个InterSystems的数据库,我可以通过ADO
.NET
- 我想从这个数据库中提取数据,并通过增量加载使插入到MS SQL连接
我建议的解决方案/目标是:
- 在MS SQL中有存储最后指针读取或日期/时间快照的表。 (在这个阶段不合适)。让我们保持简单并说我们要使用Intersystems数据库中存在的记录ID从此表中获取指针并通过ODBC将其用作参数来读取源数据库,然后插入到目标MS中SQL db
- 更新指针,读取最后一条记录,以便下一次我们从那里继续。 (我并不想进入更新/删除的并发症,让我们保持它的简单。)
迄今取得的进展:
- 我必须成功,以与MS SQL连接读取从那里指针,并将其放置在一个变量
- 我设法用参数来读取InterSystems的DB数据使用
[Execute SQL task]
,我把那到使用FullResultSet
- 我已成功使用使用
[ForEach Loop Container]
变量[Foreach ADO Enumerator]
要通过每个记录和每个字段(yeeeey!)
现在。我可以使用[Script task]
,它使用VB.NET
代码(理论上)插入MS SQL数据库,然后使用从源数据库读取的最后一条记录更新计数器。我花了无数时间寻找使用ODBC参数的解决方案,以上是我看到工作的唯一方法。
我的问题是这样的:
这是唯一的途径和最佳实践?是不是有一些简单的方法,我可以将这个结果集插入一些数据流组件,这些组件为插入和更新记录指针给我?
请假定我没有权限访问Intersystems Db,因此我无法对表结构进行任何更改。但我只能读取数据,以便将其放入MS SQL中。
在给你们(或加仑?)
我建议使用一个数据流,以提高你的两个效设计(散装VS排在脚本行)和易用性(无需编写脚本) 。
- 您应该使用执行SQL来获取指针并将其保存到变量中。
- 你应该使用动态sql和上面的变量来构建一个sql变量。
- 请在管理数据连接到源
- 添加一个数据流,并进入它
- 从弹出
- 添加源管理器和选择信号源选择从变量SQL和选择你的变量
此时,您应该拥有所需的所有数据,并且可以继续转换或直接加载到目标。
编辑:记录指针部分
- 增加组播(这使得尽可能多的拷贝,只要你想)
- 添加聚合对象和max(无论您的指针)
- OleDBSQL对象(支持实时SQL,主要用于更新
- 从组播流的新流,以查找对象,并映射你的钥匙目标表的
- 指定没有匹配的关键重定向到无匹配输出
- 你的比赛映射到一个UPDATE
- 你没有匹配的映射到一个插入
9A。UPDATE “YourPointerTable” SET “PointerField在DB”=?(?其实就是你需要输入的内容。
9b。地图,无论你在步骤命名8
这将允许您处理插入/更新
KeithL - “我会建议使用数据流来改进你的设计”。这是我第一次尝试。但是发现数据流中的ODBC数据源不支持参数。没有选择,如果你放?它会在'解析'sql查询时出错。这就是为什么我选择了“执行SQL任务”来获取数据,因为它是唯一支持参数的选项。 – user7414160
你应该为u唱一个数据流而不是执行sql到一个变量中,并在foreach中逐行处理。我将在下面的回答中加以解释 – KeithL
您正在寻找[集成系列阶梯,第4级更新增量装载行](http://www.sqlservercentral.com/articles/Stairway+Series/76390/) – billinkc