1

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

在我的 SSIS 架构下方:

在此处输入图像描述

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

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

当所有未处于“Open”状态的订单都被迁移后,我们将迁移剩余的增量。为此,我需要在 Stage 中查找已迁移的区域数据。所以对数据源的查询将是:

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

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

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

4

1 回答 1

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 值的需要

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

在此处输入图像描述

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

 SELECT * 
 FROM ORDERS   
 WHERE OrderID > [@User::StartID] AND OrderID <= [@User::EndID]   
 AND STATUS <> 'Open'
于 2013-05-16T08:08:06.937 回答