提取前的SSIS预过滤器记录

时间:2013-05-16 06:27:32

标签: sql-server-2008 ssis oracle11g data-migration

我必须将记录从Oracle中的表迁移到SQL Server 2008 R2。我已经设计了一个解决方案,允许我移动数据并将迁移的ID的副本保存到阶段表中。
由于Lookup组件和阶段表,我可以确保避免重复,因为迁移是在几个不同的时刻完成的,迁移的对象不遵循特定的顺序顺序。

在我的SSIS架构下面:

enter image description here

我使用表达式和两个变量从插槽中收集Oracle中的数据:

SELECT * 
FROM ORDERS   
WHERE OrderID > [@User::Start] AND OrderID <= [@User::End]   
AND STATUS <> 'Open'

当所有未在statsu“Open”中的订单已迁移时,我们将迁移剩余的delta。为此,我需要在Stage中查找aready迁移的数据。因此,对数据源的查询将是:

SELECT * 
FROM ORDERS   
WHERE OrderID NOT IN ([@User::AlreadyMigratedIDs])

我需要能够在变量“AlreadyMigratedIDs”中存储表Stage中的所有ID。

如何将阶段表(在SQL Server上)中的信息用作ADO.net组件中用于从Oracle收集源数据的查询的条件?我可以在ADO.net对象之前使用任何其他SSIS,例如查找吗?

1 个答案:

答案 0 :(得分:1)

在数据流之前使用执行SQL任务来存储来自sql server登台表的User :: Start和User :: End的值

 Name     Data Type  
 StartID   int
 EndID     int

将ResultSet用作Single Row

对于示例,我从Adventure Works 2008 R2中获取了查询

Select max([BusinessEntityID]) as StartID
      ,max([DepartmentID]) as EndID
FROM [AdventureWorks2008R2].[HumanResources].[EmployeeDepartmentHistory]

更改上述查询以满足您从登台表中获取ID值的需求

在结果集中将结果与创建的变量匹配

enter image description here

现在在oracle查询中使用2个变量

 SELECT * 
 FROM ORDERS   
 WHERE OrderID > [@User::StartID] AND OrderID <= [@User::EndID]   
 AND STATUS <> 'Open'