2017-03-23 58 views
1

我有一個SSIS包,它將一個CSV文件導入一個名爲「OPEX_SPEND」的表中。我也有一個叫OPEX_Accounts有以下的列表:SSIS包和外鍵

  • opex_id(主鍵)
  • opex_name
  • gl_account

的 「OPEX_Spend」 有以下欄目:

  • OPEX_SpendID(主鍵)
  • opex_id(foreign關鍵OPEX_Accounts表)
  • 日期
  • ItemText
  • 金額

我創建了一個數據流,其中CSV將進口值到OPEX_Spend表中的列,但外鍵列( opex_id)會變成「NULL」。我該如何解決?

+0

'opex_id'的期望值是多少?什麼是csv文件的結構?請提供日期樣本? – Hadi

+0

opex_id如何變爲null?你是通過查找表OPEX_Spend獲取這個值嗎?這些被加載在同一個數據流中嗎?你能否用更多的細節更新這個問題,也許是數據流或者包的圖像? –

+0

對不起,延遲迴復。數據流中沒有查找。你建議我將它融入流程中嗎? – Max

回答

0

如果CSV文件中真正缺少的值,來創建一個虛擬Opex_Id,例如

INSERT INTO Opex_Accounts 
(Opex_Id 
, Opex_Name 
, Gl_Account 
) 
VALUES(-1 
    ,'UNKNOWN' 
    ,'UNKNOWN' 
); 

ALTER TABLE Opex_Spend ADD CONSTRAINT [DF_Opex_Spend_Opex_Id] DEFAULT (-1) FOR Opex_Id; 
0

,如果你沒有在CSV文件中opex_id源列,那麼有一兩件事你可以做的是爲所有記錄添加虛擬默認值。爲此,您可以在SSIS中使用Derived column transformation。但是,如果您的意思是您在該列的源代碼中有值,但是您希望在NULL源值中包含某個默認值,那麼您也可以使用Derived column transformation但不是選擇添加新列,而是可以選擇替換現有列然後使用SSIS中的REPACENULL函數將NULL值視爲其他值。