2017-09-26 112 views
0

我有一个从多个sql server源表中获取数据并为每行分配一个序列生成号码作为ID的映射。在目标表中,ID字段被设置为主键。Informatica中将序列生成号码作为主键的表的更新策略

每次运行此映射时,它都会创建新行并为目标中预先存在的记录分配一个新ID。下面是一个例子:

1st run: 
ID SourceID Name State 
1  123  ABC NY 
2  456  DEF PA 

2nd run: 
ID SourceID Name State 
1  123  ABC NY 
2  456  DEF PA 
3  123  ABC NY 
4  456  DEF PA 

所需的输出必须: 1)创建一个新的行,如果一条记录被源更新分配一个新的ID。 2)如果在源中插入新行,则创建一个新行并分配一个新ID。

这怎么能在Informatica中获得?

预先感谢您!

+0

您是否可以充实这个问题,即您已经有了满足的映射要求或映射不符合要求的某些方面。请告知具体哪个部分要求无法正常工作 –

回答

0

我会带一份传单,并假设这里的ACTUAL问题是'如何判断传入记录是否既不插入也不更新,因此我可以忽略它'。你可以

a)在你的源数据中有一些日期字段来标识记录何时被更新,然后限制你的源限定符只拾取最后一次映射运行后最后更新的记录......缺点是如果你不感兴趣的领域被更新,那么你会处理大量的冗余记录

b)更好的建议!配置一个动态查找,该查找应存储由SourceID匹配的记录的最新状态。然后,您可以使用newlookuprow指标端口来判断记录是插入,更新还是不变更,并在随后的转换中过滤出无变化记录

+1

谢谢你的建议Daniel!我使用动态查找,路由器和更新策略来实现我所需要的功能和完美的工作:) – Subas

+0

很高兴听到。感谢您花时间回复您的结果 –

0

给这个ID领域的IDENTITY PROPERTY ...

Create Table SomeTable (ID int identity(1,1), 
         SourceID int, 
         [Name] varchar(64), 
         [State] varchar(64)) 

当你插入它...你不插入的ID东西。例如...

insert into SomeTable 
select 
    SourceID, 
    [Name], 
    [State] 
from 
    someOtherTable 

ID字段将是一个自动递增1每一个行插入时间从1开始和增量。关于每次更新或插入另一个表时添加行的问题,这是TRIGGERS的用途。

+0

我认为你的意思是对原帖发表评论,而不是我的回答@DanielMachet – scsimon

+0

哇这很快就画出来了 –