我必须将记录从Oracle中的表迁移到SQL Server 2008 R2。我已经设计了一个解决方案,允许我移动数据并将迁移的ID的副本保存到阶段表中。
由于Lookup组件和阶段表,我可以确保避免重复,因为迁移是在几个不同的时刻完成的,迁移的对象不遵循特定的顺序顺序。
在我的SSIS架构下面:
我使用表达式和两个变量从插槽中收集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,例如查找吗?
答案 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值的需求
在结果集中将结果与创建的变量匹配
现在在oracle查询中使用2个变量
SELECT *
FROM ORDERS
WHERE OrderID > [@User::StartID] AND OrderID <= [@User::EndID]
AND STATUS <> 'Open'