2010-01-12 104 views
2

我有數據從正在把我們的SQL Server 2008數據庫中的表的DataStage進來:stg_table_outside_data。我們的來源是每天早上將數據放入表格中。我想將數據從stg_table_outside_data移到table_outside_data,我在那裏保存了多天的數據。INSERT觸發器後 - SQL Server 2008中

我創建了一個存儲過程,將stg_table_outside_Data中的數據插入table_outside_data,然後截斷stg_table_outside_Data。外部datastage過程不在我的控制範圍之內,所以我必須在SQL Server 2008中完成所有操作。我原本計劃在insert語句後使用簡單的數據,但是datastage在每100,000行之後進行一次提交。觸發器會在第一次提交之後運行,並導致數據傳輸進程出現死鎖錯誤。

有沒有一種方法來設置插入後要等待30分鐘,然後確保有沒有規定時間內一個新的承諾?有沒有更好的解決方案來解決我的問題?我們的目標是將數據從臨時表中移出並進入工作表,不會出現重複,然後截斷第二天早上裝載的臨時表。

我感謝您的時間和幫助。

回答

2

你可以這樣做的一種方法是利用SQL Server 2008中新的MERGE語句(請參閱MSDN docsthis blog post),並將其作爲SQL作業每隔30分鐘左右進行一次調度。

根據源數據(您的登臺表)和目標數據(您的「真實」表)是否匹配,MERGE語句允許您輕鬆定義操作(INSERT,UPDATE,DELETE或完全沒有)一些標準,或不。所以你的情況

,這將是這樣的:

​​
1

你不應該使用觸發器來做到這一點,你應該使用計劃的工作。

+0

我希望我能。我們公司不會讓我們設定預定的工作。我們必須讓DBA參與進來,項目計劃讓我們走出了3個月。我有我們在等待名單上,但我希望找到一個臨時解決方案。 – Azzna 2010-01-12 17:36:53

+1

需要3個月的時間才能獲得dba安排工作?五分鐘或更少的任務?真?但他們讓你陷入觸發器?多麼奇怪。 – HLGEM 2010-01-12 18:29:03

+0

我們不允許安排工作,因爲他們無法阻止我們安排工作從公司內的其他數據庫獲取數據。但是,我們可以設置觸發器,因爲它是構建的幷包含在我們自己的數據庫中。 – Azzna 2010-01-12 19:48:42

0

可能建立從stg_table_outside_Data將所有數據的一天,或者使用作業調度程序來table_outside_data一次的過程。

0

對觸發器進行一次計數,如果計數小於100,000則什麼都不做。否則,運行你的過程。