複数の分散データベース(約70)から単一のソーステーブルにデータをインポートする必要があります.SSIS 2008を介してどのように可能ですか
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 テーブルに保存することです。
まだ70の宛先コンポーネントが必要です。それらすべてに同じテーブルを指定するだけです。