2013-01-18 16 views
0

嗨我從.net代碼調用存儲過程。存儲過程正在根據.net代碼發送的參數計算某些值。計算出某些值後,將在存儲過程結束時執行對同一個表的三條Insert語句。我發現有時這些插入語句不會在表中插入記錄。這很奇怪,因爲我徹底檢查了存儲過程被正確調用並且參數也被髮送。當只有一個線程運行時,問題不會出現。只有在我運行9個多線程並行訪問相同存儲過程的情況下。通過存儲過程執行的插入語句導致間歇性故障的多個線程

請建議是否需要檢查某些設置或缺少某些設置。

我懷疑可能會出現死鎖情況並阻止插入。但我不確定。我還檢查了表中索引中的allow_row_locks和allow_page_locks,並將它們設置爲'ON';

回答

0

我會說你的代碼正在生成相同的值插入,從而違反了表的約束。

表中有主鍵還是唯一鍵?也許有一些檢查表中的觸發器可能導致這種情況?

+0

嗨喬治我有1個PKEY不能爲NULL,且應該是唯一的..我用一個函數生成PKEY每個插入被調用時.. CREATE FUNCTION [功能1](@ inValue [爲nvarchar(4000 )) 返回[爲nvarchar(16)EXECUTE AS CALLER GO 調用從插入語句功能1( '001')的功能 這應該生成唯一的16位數字爲nvarchar每次..你認爲這可能導致任何問題? – Sourav

+0

Hi Sourav, 我不知道生成PKEY函數背後的邏輯,但我肯定會懷疑它是導致你的問題。 如果它產生不同的獨特結果,這意味着你在裏面使用某種隨機化。它與系統的時間有關嗎?如果這樣,你應該在生成唯一的響應之前添加一些延遲,因爲完全有可能在同一時刻執行該功能。 如果它與其他一些事物有關(例如普通的隨機),那麼它本身就是危險的。 – GeorgeVremescu

+0

嗨喬治,謝謝你的輸入。我仍在檢查那個PKey字段。我也覺得這PKey是造成這個問題。但是仍然在測試和嘗試糾正它的方法。解決後再次發佈。萬分感謝。 :) – Sourav