在SSIS中使用for循环使用多个变量

时间:2017-07-11 20:41:07

标签: loops variables for-loop ssis containers

我是SSIS的新手,下面是我想做的事情。 我有一个巨大的OLEDB数据库作为源,我想要访问的表被多个区域划分。 例如:

Select * from employee where area='01' and sub_area='02'

我想要做的是使用相同的查询循环遍历所有部门和子部门,并使用SSIS将数据插入SQL Server表中。 到目前为止我尝试过为每个部门和子部门创建多个变量,然后我尝试使用FOR循环容器来遍历所有变量。我试图循环,因为数据库是巨大的,并按区域/子区域划分得到更快的结果,而不是查询整个数据库,这需要永远执行。 我经历了很多for循环容器的例子,但我仍然不确定如何循环并让程序知道在完成第一组之后转到下一组变量(在我的情况下是dept和sub dept)。 任何帮助将不胜感激。非常感谢你。

2 个答案:

答案 0 :(得分:0)

您希望使用区域和子区域ID将数据分块。这是你需要做的。声明以下变量 -

VariableName,Type
objAreaSubAreaList,Object
sArea,String
sSub_Area,String
sSQL_GetEmployeeDataByAreaSubArea,String

对于表达式窗口中的最后一个变量,请在其中包含此表达式 -

"select * from dbo.Employee where Area = '" + @[User::@sAreaId] + "' and Sub_Area = '" + @[User::@sSub_Are] + "'"  

要做的步骤 - 1.使用“SourceDB”连接拖动执行SQL任务。设置以下属性 - 常规标签 - SQLStatement - 按区域,Sub_Area从dbo.Employee组中选择Area,Sub_Area ResultSet - 完整结果集 结果集标签 - 单击“添加”并为其指定变量 - objAreaSubAreaList并将“ResultSetName”指定为0

  1. 拖动“Foreach循环容器”并将上述任务连接到此任务。 的集合 调查员 - Foreach ADO调查员 将变量设置为 - objAreaSubAreaList 变量映射 按顺序添加两个变量sArea,sSub_Area。
  2. 在Foreach循环中拖动“数据流任务”。打开数据流任务。拖放OLE DB Source任务并设置连接。将数据访问模式设置为“来自变量的SQL命令”。将Variable设置为sSQL_GetEmployeeDataByAreaSubArea并继续执行其余任务。

答案 1 :(得分:0)

这对我有用。我创建了名为counter和counterlimit的变量。我将counter设置为0并将counterlimit设置为4.然后在for循环容器中将Initexpression设置为@ Counter = 0,将Evalexpression设置为@ Counter< @CounterLimit并将assign表达式设置为@ Counter = @ Counter + 1。 然后在where条件中我使用带有@Counter变量的Case语句来表示if @ Counter = 0然后获取area = 1和subarea = 2,依此类推。

这里区域和子区域也是变量。这样我用容器循环遍历所有区域和子区域以获得结果。不确定它是否是最佳方式,但它解决了我的问题。