2010-06-03 41 views
0

我試圖調試一些遺留集成服務代碼,真的想什麼,我認爲這個問題是一些確認:未提交讀取SSIS

我們有一個控制流容器內一個非常大的數據的任務。這個控制流容器設置爲TransactionOption = supported - 即它將從父容器'繼承'事務,但是這裏沒有設置。

數據流裏面有一個存儲過程的調用寫入到一個表僞代碼是這樣的:

「如果記錄不存在符合這些參數,然後把它寫」

現在,問題是有三個記錄被傳遞到這個proc所有的參數都是相同的,所以邏輯上第一個記錄沒有找到一個匹配並且創建了一條記錄。第二條記錄(具有相同的參數)也找不到匹配項,並創建另一條記錄。

我的理解是傳遞給數據流中的第一個'記錄'是未提交的,因此無法通過第二次調用「讀取」。結果是,所有三個記錄創建一個行,當邏輯上只有第一個應該。

在這種情況下,我正確地認爲這是未提交的交易,阻止第一次看到第二個電話?即使在容器上設置隔離級別也無濟於事,因爲它無論如何都不會被封裝在事務中......

希望有道理,並感激地收到任何建議。解決方案賦予你上帝般的地位。

回答

2

流是否過大,無法通過聚合首先流式傳輸所有這些行,以消除重複?

+1

同意,真正的解決方法是防止被複制的第一位。 – HLGEM 2010-06-03 18:42:51

+0

這些實際上並不重複。他們是3個孩子的記錄,他們創建了一個父母,隨後孩子在流程中的其他地方使用。 – OldBoy 2010-06-04 07:22:08

+1

@OldBoy我明白他們是合法的,但你可以聚合流的部分進入創建的行。 – 2010-06-04 14:07:04

0

如果更改在同一個事務中,它們應該彼此可見。我不認爲SSIS會爲每個聲明/ SP調用創建一個交易,所以我認爲問題在別處。