Sql server 2008 提取前SSIS预筛选记录

Sql server 2008 提取前SSIS预筛选记录,sql-server-2008,ssis,oracle11g,data-migration,Sql Server 2008,Ssis,Oracle11g,Data Migration,我必须将记录从Oracle中的表迁移到SQL Server 2008 R2。我已经设计了一个解决方案,允许我移动数据并将迁移的ID的副本保存到stage表中。 由于有了查找组件和阶段表,我可以确保避免重复,因为迁移是在几个不同的时刻完成的,并且迁移的对象不遵循特定的顺序 在我的SSIS架构下: 我使用一个表达式和两个变量从插槽中的Oracle收集数据: SELECT * FROM ORDERS WHERE OrderID > [@User::Start] AND OrderID

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

在我的SSIS架构下:

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

SELECT * 
FROM ORDERS   
WHERE OrderID > [@User::Start] AND OrderID <= [@User::End]   
AND STATUS <> 'Open'
我的需求是能够在变量“AlreadyMigratedIDs”中存储表阶段中存在的所有ID


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

在数据流之前使用Execute SQL Task来存储SQL server暂存表中User::Start和User::End的值

 Name     Data Type  
 StartID   int
 EndID     int
将结果集用作
单行

对于示例,我从AdventureWorks2008R2中获取了查询

Select max([BusinessEntityID]) as StartID
      ,max([DepartmentID]) as EndID
FROM [AdventureWorks2008R2].[HumanResources].[EmployeeDepartmentHistory]
更改上述查询,以符合从暂存表中获取ID值的需要

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

现在在oracle查询中使用这两个变量

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

其中OrderID>[@User::StartID]和OrderID在数据流之前使用Execute SQL Task存储SQL server暂存表中User::Start和User::End的值

 Name     Data Type  
 StartID   int
 EndID     int
将结果集用作
单行

对于示例,我从AdventureWorks2008R2中获取了查询

Select max([BusinessEntityID]) as StartID
      ,max([DepartmentID]) as EndID
FROM [AdventureWorks2008R2].[HumanResources].[EmployeeDepartmentHistory]
更改上述查询,以符合从暂存表中获取ID值的需要

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

现在在oracle查询中使用这两个变量

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

其中OrderID>[@User::StartID]和OrderID您需要提供查询和包设计来解释您的场景。您可以使用
执行SQL任务
来存储条件,如从
SQL Server
获取所有
ID并存储在变量中。然后使用上述变量创建SQL表达式(
Select col..from table where ID=@variable
)并在
ADO.NET source
@paven中使用它:我添加了用于收集数据的查询。我喜欢将ID存储在变量中并用SQL任务初始化它的想法。您能提供一个例子吗?变量应该是哪种数据类型(总共约160K条记录)?从何处获取变量
User::Start
User::End
的值?我手动输入值,因为我们必须控制移动的记录范围。因此,我在数据流范围中手动设置变量的范围。您需要提供查询和包设计来解释您的场景。好吗可以使用
executeSQL Task
存储条件,如从
SQL Server
获取所有
ID
,并将其存储在变量中。然后使用上述变量创建SQL表达式(
Select col..from table where ID=@variable
)并在
ADO.NET source
@Paven中使用它:我添加了用于收集数据的查询。我喜欢将ID存储在变量中并用SQL任务初始化它的想法。您能提供一个例子吗?变量应该是哪种数据类型(总共约160K条记录)?从何处获取变量的值
User::Start
User::End
?我手动输入值,因为我们必须控制移动的记录范围。因此,我在数据流范围手动设置变量的范围。感谢您的建议。我编辑了我的问题,介绍了我要查找的查询。我的need将在一个变量中包含所有已迁移的Id。在迁移剩余增量记录的那天,我们不再需要开始/结束变量,因为我们只需要移动所有尚未迁移的数据。Id如何存储在变量中?这就是我要问的。在迁移期间,我用顺序Id填充Stage表。我喜欢你的建议,因为如果我可以在SQL任务中初始化一个变量,例如,使用STage表中包含的所有ID,那么我可以按照第二次查询中的指示使用它。我想知道实现这一点的最佳方法是什么。你需要创建一个包含所有ID的数组作为字符串数据类型。根据文章,谢谢你的建议。我编辑了我的问题,介绍了我正在寻找的查询。我需要的是在一个变量中包含所有已迁移的Id。在迁移剩余增量记录的那天,我们不再需要开始/结束变量,因为我们只需要移动所有尚未迁移的数据。Id是如何存储在变量中的?我就是这样提问。在迁移过程中,我用顺序ID填充Stage表。我喜欢你的建议,因为如果我可以在SQL任务中初始化一个变量,例如,使用Stage表中包含的所有ID,那么我就可以按照第二次查询中的指示使用它。我想知道实现这一点的最佳方法是什么。你需要创建一个包含所有ID的数组作为字符串数据类型。根据文章