Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SSIS-从多个数据库导入相同的数据_Sql Server_Ssis - Fatal编程技术网

Sql server SSIS-从多个数据库导入相同的数据

Sql server SSIS-从多个数据库导入相同的数据,sql-server,ssis,Sql Server,Ssis,我希望将数据从具有相同结构的表(在许多不同的源数据库中)复制并合并到目标数据库中具有类似结构的单个表中。有时我需要添加或删除源数据库 目前,这是通过使用包含OLEDB源和SQL查询的数据流任务来实现的,在SQL查询中,我要从中提取的每个数据库都有一个联合。每个联合体中都有大量SQL,因此,如果需要添加字段,则需要向每个联合体添加相同的附加SQL。类似地,当我添加或删除源数据库时,我需要添加或删除联合 我希望,与其使用这样一个包含大量重复代码的联合,我可以,使用Foreach循环容器,该容器使用参

我希望将数据从具有相同结构的表(在许多不同的源数据库中)复制并合并到目标数据库中具有类似结构的单个表中。有时我需要添加或删除源数据库

目前,这是通过使用包含OLEDB源和SQL查询的数据流任务来实现的,在SQL查询中,我要从中提取的每个数据库都有一个联合。每个联合体中都有大量SQL,因此,如果需要添加字段,则需要向每个联合体添加相同的附加SQL。类似地,当我添加或删除源数据库时,我需要添加或删除联合

我希望,与其使用这样一个包含大量重复代码的联合,我可以,使用Foreach循环容器,该容器使用参数执行变量中包含的SQL,以替换每次迭代中SQL中的数据库和其他依赖于数据库的项的名称,但我遇到了这个问题,因为我假设循环中的数据流任务无法解释传入字段,因为使用的是什么有效的动态SQL


关于如何在不重复大量SQL的情况下最好地实现这一点,您有什么建议吗?

听起来您已经找到了从一个数据库移动到另一个数据库的循环。只要数据库之间的表模式相同(除了注意到的名称),这就应该适合您

在For Each循环容器中,创建一个脚本任务或一个执行SQL任务,无论您使用哪种任务更方便

使用该任务动态生成OLE DB源查询的SQL,更改每次迭代的客户代码前缀。直接在脚本任务中或通过将执行SQL任务的结果集(结果集为查询文本)分配给变量,将SQL文本分配给变量

在数据流任务中,在OLE DB源中,在数据访问模式下选择“SQL命令自变量”。选择在上一个任务中用查询填充的变量


您还需要处理在迭代之间更改连接字符串的问题,但是,同样,听起来您在该部分已经有了一个句柄。

在表达式(或执行SQL脚本任务之外的任何位置)中构建SQL,并确保它已被公式化为脚本任务。是否在每个数据库中运行相同的查询?如果是这样,那么您的SQL是静态的。更改的只是连接字符串。如果所有这些数据库都在同一台服务器上,那么您可以将其全部写入存储过程。在同一台服务器上存在所有表?查询不是完全相同的,因为我需要为每个客户代码添加依赖于数据库的前缀。这些表在同一台服务器上,但在不同的数据库中。谢谢Eric。大多数情况下,这正是我试图做的(并使用执行SQL任务而不是脚本)。我认为不同之处在于,我没有改变迭代之间的连接,因为变量内容在每次迭代中都会发生变化,以显式地处理适当的数据库-例如,选择?+CustomerCode,*FROM?.dbo.MyTable这两个在哪里?替换为前缀和数据库名称。您认为我可以通过删除数据库名称替换来解决这个问题吗?