2017-09-26 71 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

哇這很快就畫出來了 –