Sql 对多个数据库使用数据集市

Sql 对多个数据库使用数据集市,sql,ssis,business-intelligence,datamart,Sql,Ssis,Business Intelligence,Datamart,我目前正在做一个项目,使用来自ERP数据库的SSIS 2008 r2构建一个数据集市 这些数据集市将必须在具有相同结构的每个数据库中使用相同的表/字段 问题在于,源表名称会根据连接到的数据库而更改。但是表结构元数据在这些环境之间不会改变 比如说,, 数据库1项表名为company_name1$item 数据库2项表名为company_name2$item 我正在寻找一个解决方案,使数据集市可以用于两个数据库 我做了一些研究;我发现我的解决方案可以如图所示 如图中所示,构建数据集市需要遵循以下步

我目前正在做一个项目,使用来自ERP数据库的SSIS 2008 r2构建一个数据集市

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

问题在于,源表名称会根据连接到的数据库而更改。但是表结构元数据在这些环境之间不会改变

比如说,, 数据库1项表名为company_name1$item 数据库2项表名为company_name2$item

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

我做了一些研究;我发现我的解决方案可以如图所示

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

要构建数据集市,您需要提取信息并进行处理 他们通过ETL获得所需的数据集市。这个程序需要 将应用于所有数据库

此过程可以通过erp数据库中名为 对象此表包含有关数据库的所有信息 表,但最有用的字段是表id、表名和公司 名字

现在,我想使用这个表id,Name Company来选择合适的表,而不必根据表名选择数据,但是对象表和其他表之间没有链接,所以您需要创建某种代码或东西来创建链接。 在一个简单的例子中,当我想使用包作为数据库时,我有一个insert作为公司名称,包将被运行以填充我的数据集市

正如一些人所建议的,我应该使用这种类型的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
另一个同样有趣的是,SSIS允许在源和目标中使用变量名。我只需要提供改变价值的机制。可能这是一个foreach枚举器,包含数据流或运行时设置的参数。
两种建议的解决方案都很好,但仍不清楚如何做到这一点,我希望现在我已经解释了我的问题,我会得到一个更具体的答案

很难说出你的要求。如果要构建数据集市,则需要为集市构建标准数据模型,然后定义提取/加载/转换过程,以便从每个数据库的所有源数据库中加载数据,因为每个源数据库中的模式似乎不同。感谢您的回答,因此我的理解是,在每个数据流中,我所要做的就是更改表名?我也被你的问题弄糊涂了,但我读到的是,源或目标表名根据它所连接的数据库而更改。正如您明确指出的,元数据表结构在这些环境之间不会改变,您很幸运。SSIS允许在源和目标中使用变量名。您只需要提供改变该值的机制。可能这是一个foreach枚举器,包含数据流或运行时设置的参数。没有更多细节,就很难开出解决方案谢谢你的回答!是的,我认为你的建议会对我有所帮助。我试图添加更多关于我问题的细节。我想详细说明如何提供价值变化的机制?我同意@billinkc。若您有相同的结构,并且希望重用包,只需将表名设置为变量,并通过数据库列表枚举即可。您必须创建数据库和包含表的列表,或者如果您可以从db名称计算表名,那么就更容易了。我曾经创建表单,允许我选择要使用的数据库。