2015-02-10 75 views
0

我有一個系統設置了存儲過程的批量執行10次。SQL過程執行順序

exec procedure 1 
 
exec procedure 2 
 
exec procedure 3 
 
exec procedure 4 
 
... 
 
exec procedure 10

的過程被設計爲聚積基於記錄的在目標表中的ID的行駛總。

當我運行該批次時,我將得到不同步的結果。運行總數應該是前一行的運行總和加上當前行的值。

當我用GO語句在每個之間運行相同的批處理時,運行需要更長的時間,但運行正確。

是否有任何種類的提示(如「MAXDOP 1」)可以在這種情況下完成,以強制程序執行並按順序完成而不會失去同步?

我應該補充說,被調用的存儲過程本身調用幾個過程。如果這對解決方案有任何影響。

+0

也許編輯程序本身會更好?很難說如果不知道更多的是怎麼回事 – 2015-02-10 21:51:51

+0

顯然,程序的執行默認是並行化的,所以它們很快完成,但是它們的順序看起來很混亂。很明顯,插入GO可以確保它們按順序執行,這是你想要的,但是不會有並行性,所以它們需要更長的時間才能運行。請選擇任一順序或速度,你不能同時擁有。 – 2015-02-10 21:52:48

+0

[存儲過程 - 強制執行順序]的可能重複(http://stackoverflow.com/questions/2682960/stored-procedure-forcing-execution-order) – 2015-02-11 07:52:33

回答

0

我做了一些更多的測試,看起來像我最初的想法是不正確的。我使用GO語句對批次進行了多次測試,即使如此,批次中只有少數記錄會更新其運行餘額,但其餘部分將保持不同步。它看起來像我做了初始測試時,前10個記錄正確更新,但我沒有注意到該部分中的其他內容,因爲其餘的值在數據集的後面部分之前已經是正確的。

這看起來像是程序內部的問題,而不是重複執行程序。奇怪的是,我們從未在單核系統上遇到過這個問題,這仍然是我認爲這是一個並行性問題,但很可能是程序內部的問題。

對不起,浪費你的時間。