SSIS包变量配置

问题描述 投票:0回答:1

我有一个每天运行的SSIS包,并在Oracle数据库中执行查询。此查询仅针对新添加的记录执行,例如:

select t1.* 
from info_table t1,
     dates_table t2 
where t1.date = (select t2.date from dates_table where (select max(id) from dates_table))

有时需要为之前的日期执行相同的包,现在我需要维护2个包。第一个从查询中获取日期,而第二个直接通过配置文件获取。是否有任何方法(可能通过创建更复杂的配置文件)根据我的需要执行相同的包?

非常感谢

sql oracle ssis config configuration-files
1个回答
0
投票

是否有任何方法(可能通过创建更复杂的配置文件)根据我的需要执行相同的包?

不容易。最简单的(这是相对BTW)将有一个表的控制表,用于从中选择日期,然后您只需以SELECT将抓取的方式操作该表。这还需要重新分解SELECT查询以放弃SELECTing MAX(DATE)。如果您需要日期表来存储历史日期,那么您将需要添加另一列作为开关,用于指示要加载的日期,然后按日期升序排序。例如:

ID         DateLoadInd
3/21/2019  1 -- this will load
3/20/2019  0 -- this will not load
3/19/2019  0 -- this will not load
3/18/2019  0 -- this will not load
3/17/2019  1 -- this will load 

SELECT T1.*
FROM Info_Table T1
INNER JOIN Date_Table T2
ON T1.Date = T2.ID
WHERE T2.DateLoadInd = 1
ORDER BY T2.ID ASC

或者,您可以放弃加入Date_Table并仅参数化查询以通过映射到变量的包参数接收值。我不喜欢这种方法,因为它需要SQL Server确定并将日期提供给作业。我不认为可以在package参数中使用GETDATE()函数,希望它将被执行以确定日期(即,它仅作为字符串传递)。因此,您需要采取允许作业自动运行的方法,希望您可以让它在当前日期运行,除非您想要覆盖并提供特定日期。即使它确实有效,你仍然需要记住将package参数翻转回GETDATE() - 这比它的价值还要多,这就是为什么我不喜欢它而不是创建一个更复杂的配置文件。

在那个笔记上,当你说:

(也许通过创建更复杂的配置文件)

我理解,要说您使用的是旧版程序包部署模型,而不是更现代(更好的IMHO)项目部署模型。

© www.soinside.com 2019 - 2024. All rights reserved.