2014-09-10 34 views
0

當新紀錄SCD組件類型添加的歷史,OLE DB命令執行查詢:參數SCD模塊 - 歷史型

UPDATE [table] SET [ExpirationDate] = ? WHERE [ID] = ? AND [ExpirationDate] = '9999-12-31' 

如何解決該查詢,以便設置[到期日期] = [ImportDate ]發生變化時。 查詢:

UPDATE [table] SET [ExpirationDate] = [ImportDate] WHERE [ID] = ? AND [ExpirationDate] = '9999-12-31' 

生成錯誤:

OLE DB provider used by the OLE DB adapter cannot convert between 
types DT_DBTIMESTAMP2 and DT_NUMERIC for Param_0 

我不理解它,因爲這兩個[到期日期]和[ImportDate]具有相同的類型(DATETIME2)。如何在歷史更改發生時實現此更新?

+0

什麼是[ImportDate]?它是你桌子上的另一列嗎? – TMNT2014 2014-09-10 13:36:08

+0

是............ – arth81 2014-09-11 12:49:29

+0

恕我直言,溝渠SCD組件 - 它很慢,不靈活,只覆蓋了大約80%的要求。我總是使用登臺表和SQL語句。 – 2018-02-03 09:23:53

回答

0

OLEDB cmd中的錯誤消息指的是「?」被映射。是ID數字,並在映射到日期字段的下一個選項卡上是param_0?

,你應該設置該命令會是這樣的方式:

UPDATE [table] SET [ExpirationDate] = ? WHERE [ID] = ? AND [ExpirationDate] = '9999-12-31' 

在下面的選項卡中,將有兩個參數,映射第一至[ImportDate]和第二對中的ID字段。參數按順序映射。

+0

我已經改變了映射(將ExpirationDate切換到ImportDate)但沒有任何反應。 SCD不能正常工作(不檢測變化)。唯一的例子是默認情況下ExpirationDate爲空。我做了dump dump:在SCD給出sql任務組件之前和之後。首先將9999-12-31更改爲空值,然後將空值更改爲9999-12-31 – arth81 2014-09-11 12:39:18

+0

您還需要將命令文本更改爲我發佈的內容。應該有兩個參數,否則你只是用同一行中的另一列更新一列。 – 2014-09-12 10:40:22

+0

該命令是相同的更新[表] SET [ExpirationDate] =? WHERE [ID] =? ... – arth81 2014-09-13 19:36:15