0

複数の分散データベース(約70)から単一のソーステーブルにデータをインポートする必要があります.SSIS 2008を介してどのように可能ですか

4

2 に答える 2

2

70 台のソース サーバーのそれぞれに対して同じクエリを実行できると仮定すると、単一のデータ フロー タスクで ForEach ループを使用できます。ソース接続マネージャーConnectionStringは、ループ変数を使用した式である必要があります。

INFORMATION_SCHEMA.COLUMNS複数の DB からビューを読み取る例を次に示します。ローカル インスタンスに次のテーブルを作成しました。

<!-- 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::SourceList、SQL_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 に答える