1

我目前正在开展一个使用 ERP 数据库中的 SSIS 2008 r2 构建数据集市的项目。

这些数据集市必须在具有相同结构(相同表/字段)的每个数据库中使用。

问题是源表名会根据连接的数据库而变化。但是表结构(元数据)在这些环境之间不会改变。

例如,数据库 1项目表名是company_name1$item 数据库 2项目表名是company_name2$item

我正在寻找一种使数据集市可用于两个数据库的解决方案。

我做了一些研究;我发现我的解决方案可以像图片中解释的那样 在此处输入图像描述

正如您在图中所示,构建数据集市需要遵循以下步骤:

  • 要构建数据集市,您将提取信息并通过 ETL 处理它们以获得所需的数据集市。此过程需要应用于所有数据库

  • 此过程可以通过 erp 数据库中名为
    object 的表来完成。该表包含有关数据库
    表的所有类型的信息,但最有用的字段是表 id、表名和公司名称

在此处输入图像描述

现在,我想使用这个表 id,Name Company 来选择合适的表,而不必根据表名选择数据,但对象表和其他表之间没有链接,所以你需要创建某种代码或能够创建链接的东西。 简而言之,当我想将包用于数据库时,我插入的是公司名称,并且将运行包来填充我的数据集市。

正如一些人建议的那样,我应该使用这种类型的 sql 过程 USE YourDataBaseName;

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

另一个也很有趣的是,SSIS 允许在源和目标中使用变量名。我只需要提供使该值发生变化的机制。也许那是一个包含数据流或运行时参数集的 foreach 枚举器。 两个建议的解决方案都很棒,但仍然不清楚如何做到这一点,我希望现在我已经解释了我的问题,我会得到一个更具体的答案

4

0 回答 0