我目前正在开展一个使用 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 枚举器。 两个建议的解决方案都很棒,但仍然不清楚如何做到这一点,我希望现在我已经解释了我的问题,我会得到一个更具体的答案