2015-11-05 39 views
2

我有一個任務將現有的SQL Server表加載到Teradata時態表中。現有的表是一個2型表,並有許多版本的記錄。我需要將它們加載到teradata時態表中。我打算加載版本1 1st,然後逐一更新所有其他版本。 我遇到的困難是,在現有的表格中,每條記錄都有開始時間和結束時間。我需要在teradata時間表中更新那個時間作爲有效性。將歷史數據加載到teradata時態表中

1st我試圖插入,雖然插入我不能插入結束時間少於當前時間。它將錯誤報告爲「檢查約束違規」。以下是用於創建表格和插入的示例代碼片段。

我還沒有測試更新爲無法做第一步。

CREATE multiset TABLE EDW_T.edw_Contracts_History_Test 
(
    ID INTEGER, 
    Validity PERIOD(TIMESTAMP(3)) NOT NULL AS VALIDTIME 
); 

insert into EDW_T.edw_Contracts_History_Test(id,Validity) values(
1,period(cast('1996-01-20 05.00.00.000' as TIMESTAMP(3)), cast('2016-06-23 21.52.20.000' as TIMESTAMP(3)))) 
--this pass as 2016 is greater than current date 
insert into EDW_T.edw_Contracts_History_Test(id,Validity) values(
1,period(cast('1996-01-20 05.00.00.000' as TIMESTAMP(3)), cast('2015-06-23 21.52.20.000' as TIMESTAMP(3)))) 
--This fails as i m trying to give end time less than current date. 

有沒有辦法讓結束時間少於當前日期。任何方式來禁用時間限制,然後啓用。

請幫忙。謝謝!

+0

使用Sequnce VT修改。 –

回答

1

要插入歷史記錄行,你應該使用Sequnce有效時間修改...

如:

SEQUENCED VALIDTIME 
insert into EDW_T.edw_Contracts_History_Test(id,Validity) values(
1,period(cast('1996-01-20 05.00.00.000' as TIMESTAMP(3)), cast('2015-06-23 21.52.20.000' as TIMESTAMP(3)))); 
+0

嗨@anwaar_hell一次只能插入一行。但我必須使用insert-select語句插入多行。當我嘗試下面的陳述時,我會發生另一個錯誤。你可以請指教如何解決這個問題:順序有效時間 插入到EDW_T.edw_Contracts_History_Test(id,有效期) 選擇id,句點(cast('1996-01-20 05.00.00.000'作爲TIMESTAMP(3)),cast '2015-06-23 21.52.20.000'as TIMESTAMP(3))) from EDW_T.edw_Contracts_History_Test - 有序插入選擇語句的列列表中的有效時間列名稱無效。感謝您的幫助 – user863952

+0

嗨,我能找到解決方案。我們需要使用merge而不是insert-select語句。從下面的鏈接得到幫助[合併更新時間](http://stackoverflow.com/questions/24171074/merge-update-temporal?rq=1) – user863952

+0

我在下一步有另一個問題。我有3個版本的記錄。例如第一個1/1/10-1/1/11。我能夠使用合併插入第一個版本。第二版是從1/1/11-1/1/14。如果我嘗試使用非順序執行合併和更新有效性(期間列),則Teradata更新第1條記錄本身。也許是因爲它關閉了時間特徵。但我錯過了歷史。所以我試圖更新,而不使用非序列。與此問題是查詢沒有找到表中的數據,並說更新0行。這一定是因爲它只讀取當前記錄。有什麼辦法可以加載所有三個版本。 – user863952