私は現在、ERP データベースから SSIS 2008 r2 を使用してデータ マートを構築するプロジェクトに取り組んでいます。
これらのデータマートは、同じ構造 (同じテーブル/フィールド) を持つすべてのデータベースで使用する必要があります。
問題は、接続されているデータベースに基づいてソース テーブル名が変わることです。ただし、これらの環境間でテーブル構造 (メタデータ) は変わりません。
たとえば、データベース 1のアイテムテーブル名はcompany_name1$itemです データベース 2のアイテムテーブル名はcompany_name2$itemです
データマートを両方のデータベースで使用できるようにするソリューションを探しています。
私はいくつかの調査を行いました。私の解決策は、写真で説明されているようになることがわかりました
図のように、データマートを構築するために従うべき手順があります。
データマートを構築するには、情報を抽出し、ETL を介してそれらを処理して、目的のデータマートを作成します。この手順はすべてのデータベースに適用する必要があります
この手順は、オブジェクトと呼ばれる erp データベース内のテーブルによって実行できます。
このテーブルには、データベース テーブルに関するあらゆる種類の情報が含まれています
が、最も有用なフィールドは、テーブル ID、テーブル名、および会社名です。
ここで、このテーブル ID Name Company を使用して、テーブル名に基づいてデータを選択することなく適切なテーブルを選択したいのですが、オブジェクト テーブルと他のテーブルとの間にリンクがないため、何らかのコードを作成する必要があります。リンクを作成できるもの。 簡単に言えば、データベースにパッケージを使用したい場合、会社名を挿入すると、データマートを埋めるためにパッケージが実行されます。
一部の人が示唆したように、このタイプの USE YourDataBaseName; の SQL プロシージャを使用する必要があります。
CREATE PROCEDURE GetMyData
@aCompany NVARCHAR(50) = NULL,
@tbl_ID INT = 0
AS
SET NOCOUNT ON;
DECLARE @tableName NVARCHAR(50)
DECLARE @aQuery NVARCHAR(4000)
SELECT @tableName = [Name]
FROM [object]
WHERE [Company Name] = @aCompany AND [ID] = @tbl_ID
SET @aQuery = 'SELECT * FROM ' + @tableName
EXEC(@aQuery)
GO
もう 1 つは、SSIS ではソースと宛先で変数名を使用できるという興味深いものでした。その値を変更するためのメカニズムを提供する必要があるだけです。おそらくそれは、実行時にデータ フローまたはパラメーター セットを含む foreach 列挙子です。 提案された両方の解決策は素晴らしいですが、それを行う方法がまだ明確ではありません。質問を説明したので、より具体的な回答が得られることを願っています