[英]SSIS package Query Optimization
我想對如何修復程序中發現的一個小錯誤有個想法,該程序可以在我支持的Web訂購系統的Oracle數據庫和SQL Server數據庫之間傳輸數據。
問題是,當同一天下達兩個訂單(例如129和130)時,如果首先驗證了后續訂單(130) ,則先前的Web訂單(129)不會移至Oracle DB。 發生這種情況的原因是,該程序檢查轉移到Oracle DB的最大Web訂單,並嘗試僅將SQL Web訂單號移動到更高的水平。
在SSIS軟件包中構建的支持此概念的查詢如下:
在甲骨文方面
Select nvl(max(web_order_id),0) maxOrderIDParam from web_shipping
在SQL Server方面
SELECT cast(web_order_id as float) web_order_id, web_entry_date, site_num, protocol_num, inv_num, cast(pharm_num as float) pharm_num, status, comments, username, porstatus
FROM Web_Shipping
WHERE web_order_id > ?
AND status = 'V'
ORDER BY web_order_id
在甲骨文方面
insert into web_shipping (web_order_id, web_entry_date, site_num, protocol_num, inv_num, pharm_num, status, comments, username, porStatus)
values (:web_order_id, :web_entry_date, :site_num, :protocol_num, :inv_num, :pharm_num, :status, :comments, :username, :porStatus)
在SQL Server方面
select cast(web_order_id as float) web_order_id, line_id, cast(no_of_participants as float) no_of_participants, cast(amt_inventory as float) amt_inventory, cast(NSC_num as float) NSC_num, cast(dose_str as float) dose_str, dose_unit, dose_form, dose_mult, cast(amt_req as float) amt_req
FROM web_ship_detail
WHERE web_order_id = ?
最后在甲骨文方面
insert into web_ship_detail (web_order_id, line_id, no_of_participants, amt_inventory, NSC_num, dose_str, dose_unit, dose_form, dose_mult, amt_req)
values (:web_order_id, :line_id, :no_of_participants, :amt_inventory, :NSC_num, :dose_str, :dose_unit, :dose_form, :dose_mult, :amt_req)
努力設計出一種分辨率,使整個SSIS軟件包中的代碼更改最少。
我知道您正在尋找最小的代碼更改,不確定這些更改是否合格,但是會100%修復該問題。 有3個選項:
修改MS SQL表,並包括“ IsTransferred”位列。 將已驗證的記錄移至oracle后,將列更新為1 / true
跟蹤已轉移到Oracle的訂單的單獨表。 選擇MS SQL訂單時,請排除新的“已轉移”表中存在的訂單。
創建一個數據流對象,將Oracle&MS SQL訂單表作為源,使用合並聯接,並使用左外部。 使用Oracle列為空(沒有匹配的Oracle記錄,沒有轉移)的結果,並使用這些記錄轉移到Oracle。
不知道雙方都有多少條記錄,因此某些選項可能會影響性能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.