我有一个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个程序包。 第一个直接从查询中获取日期,第二个直接通过配置文件获取日期。 有什么方法(也许通过创建一个更复杂的配置文件)来根据我的需要执行相同的程序包?
非常感谢
答案 0 :(得分:0)
有没有办法(也许通过创建一个更复杂的配置文件)来 根据我的需要执行相同的程序包?
不容易。最简单的方法(这是相对的BTW)是为该表提供一个控制表,以便从中选择日期,然后您可以通过选择SELECT的方式来操纵该表。这也需要对SELECT查询进行重构以放弃SELECTING MAX(DATE)。如果您需要日期表来存储历史日期,则需要添加另一列,该列的作用类似于一个开关,用于指示要加载的日期,然后按DATE升序排序。例如:
$party_id = json_decode($bodyresponse)->parties[0]->id;
var_dump($party_id);
// Result: int(11587)
或者,您可以放弃加入Date_Table的操作,而只需将查询参数化即可通过映射到变量的包参数接收值。我不喜欢这种方法,因为它需要SQL Server确定并提供作业日期。我认为不可能在包参数中使用GETDATE()函数来希望将其执行以确定日期(即,仅将其作为字符串传递)。因此,您不会采用允许作业自动运行的方法,希望您可以让它按当前日期运行,除非您要覆盖并提供特定日期。即使这样做确实可行,您仍然需要记住将package参数翻转回GETDATE(),这比它值得的工作要多,这就是为什么我不喜欢创建更复杂的配置的原因文件。
请注意,当您说:
(也许通过创建一个更复杂的配置文件)
我了解到,您使用的是旧版软件包部署模型,而不是更现代(更好的IMHO)项目部署模型。