0

我需要将数据从多个分布式数据库(大约 70 个)导入单个源表。那么如何通过 SSIS 2008

4

2 回答 2

2

假设您可以对 70 个源服务器中的每一个运行相同的查询,您可以将 ForEach 循环与单个数据流任务一起使用。源连接管理器ConnectionString应该是使用循环变量的表达式。

INFORMATION_SCHEMA.COLUMNS这是一个从多个数据库读取视图的示例。我在本地实例上创建了以下表:

<!-- language: lang-sql -->
CREATE TABLE [MultiDbDemo].[SourceConnections](
    [DatabaseKey] [int] IDENTITY(1,1) NOT NULL,
    [ServerName] [varchar](50) NOT NULL,
    [DatabaseName] [varchar](50) NOT NULL,
 CONSTRAINT [PK_SourceConnections] PRIMARY KEY CLUSTERED 
(
    [DatabaseKey] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

CREATE TABLE [MultiDbDemo].[SourceColumns](
    [ColumnKey] [int] IDENTITY(1,1) NOT NULL,
    [ServerName] [varchar](50) NOT NULL,
    [DatabaseName] [varchar](50) NOT NULL,
    [SchemaName] [varchar](50) NOT NULL,
    [TableName] [varchar](50) NOT NULL,
    [ColumnName] [varchar](50) NOT NULL,
 CONSTRAINT [PK_SourceColumns] PRIMARY KEY CLUSTERED 
(
    [ColumnKey] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

这是 SSIS 包的控制流程: 在此处输入图像描述

Source_AdoDotNet 连接管理器的ConnectionString属性设置为以下表达式:
在此处输入图像描述

SQL_GetSourceList 的SQLStatement属性是SELECT ServerName, DatabaseName FROM MultiDbDemo.SourceConnections,并且ResultSet映射到User::SourceList变量。

ForEach 循环任务是这样配置的:
在此处输入图像描述 请注意,ADO 对象源变量设置为User::SourceListSQL_GetSourceList 任务中填充的变量。
在此处输入图像描述

数据流如下所示:
在此处输入图像描述

ADO_SRC_SourceInfo 是这样配置的:
在此处输入图像描述

所有这一切的下一个效果是,对于 SourceConnections 表中列出的每个数据库,我们执行查询SELECT LEFT(TABLE_SCHEMA, 50) AS SchemaName, LEFT(TABLE_NAME, 50) AS TableName, LEFT(COLUMN_NAME, 50) AS ColumnName FROM INFORMATION_SCHEMA.COLUMNS并将结果保存在 SourceColumns 表中。

于 2013-01-18T20:37:07.393 回答
0

您仍然需要 70 个目标组件。只需在所有这些中指定同一个表。

于 2013-01-18T14:16:57.907 回答