我想将具有相同结构的表(在许多不同的源数据库中)中的数据复制并合并到目标数据库中具有类似结构的单个表中。我不时需要添加或删除源数据库。
目前,这是使用包含带有SQL查询的OLEDB源的数据流任务实现的,其中对于我从中提取的每个数据库都有一个UNION。每个UNION中都有相当多的SQL,因此,如果我需要添加字段,我需要为每个UNION添加相同的附加SQL。同样,当我添加或删除源数据库时,我需要添加或删除UNION。
我希望,而不是使用具有大量重复代码的UNION,而不是使用Foreach循环容器,使用参数来执行包含在变量中的SQL来替换数据库和其他数据库的名称每次迭代时SQL中的依赖项,但我遇到了问题,因为我认为循环中的数据流任务无法解释传入的字段,因为使用的是有效的动态SQL。
关于如何在不重复大量SQL的情况下实现这一目标的任何建议?
答案 0 :(得分:0)
听起来你已经找到了从数据库转移到数据库的循环。只要表模式从数据库到数据库是相同的(除了注明的名称),这应该适合您。
在For Each Loop容器中,创建一个脚本任务或一个执行SQL任务,无论您使用哪个更舒服。
使用该任务动态生成OLE DB Source查询的SQL,更改每次迭代的Customer Code前缀。将SQL文本直接分配给脚本任务,或者将执行SQL任务的结果集(结果集作为查询文本)分配给变量。
在数据流任务中,在OLE DB源中,在数据访问模式下选择“来自变量的SQL命令”。选择在上一个任务中使用查询填充的变量。
您还需要处理迭代之间更改连接字符串的问题,但同样,听起来您已经掌握了该部分的句柄。