我是SSIS的新手,下面是我想做的事情。 我有一个巨大的OLEDB数据库作为源,我想要访问的表被多个区域划分。 例如:
Select * from employee where area='01' and sub_area='02'
我想要做的是使用相同的查询循环遍历所有部门和子部门,并使用SSIS将数据插入SQL Server表中。 到目前为止我尝试过为每个部门和子部门创建多个变量,然后我尝试使用FOR循环容器来遍历所有变量。我试图循环,因为数据库是巨大的,并按区域/子区域划分得到更快的结果,而不是查询整个数据库,这需要永远执行。 我经历了很多for循环容器的例子,但我仍然不确定如何循环并让程序知道在完成第一组之后转到下一组变量(在我的情况下是dept和sub dept)。 任何帮助将不胜感激。非常感谢你。
答案 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 :(得分: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,依此类推。
这里区域和子区域也是变量。这样我用容器循环遍历所有区域和子区域以获得结果。不确定它是否是最佳方式,但它解决了我的问题。