【问题标题】:Update strategy for table with sequence generated number as primary key in InformaticaInformatica中以序列生成数为主键的表更新策略
【发布时间】:2017-09-27 03:41:16
【问题描述】:

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

每次我运行此映射时,它都会创建新行并为目标中预先存在的记录分配一个新 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 中获得?

提前谢谢你!

【问题讨论】:

  • 您能否进一步充实这个问题,即您已经有一个满足要求的映射,或者映射不满足要求的某些方面。请告知具体要求的哪一部分不起作用

标签: sql-server duplicates transformation informatica mappings


【解决方案1】:

我将采取传单并假设此处的实际问题是“我如何判断传入记录是否既不是插入也不是更新,以便我可以忽略它”。你可以

a) 在您的源数据中有一些日期字段来识别记录的更新时间,然后将您的源限定符限制为仅选择上次运行此映射后最后更新的记录...缺点是如果字段您'不感兴趣的被更新了那么你会处理很多多余的记录

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

【讨论】:

  • 感谢丹尼尔的建议!我使用了动态查找、路由器和更新策略来实现我所需要的并且它完美地工作:)
  • 很高兴听到。感谢您花时间回复您的结果
【解决方案2】:

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 的用途。

【讨论】:

  • 我认为您的意思是评论原始帖子,而不是我的回答@DanielMacchet
  • 哇,抽奖的速度太快了?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-23
  • 2011-08-01
  • 2022-01-27
  • 2022-08-17
  • 2014-05-26
  • 1970-01-01
  • 2019-03-01
相关资源
最近更新 更多