我有一個CakePHP程序中,我調用存儲過程:
$this->FileUpload->query('exec sproc_runjob_ProcessTests', false);
此過程拿起一個上傳的文件並處理它。有時候人們會上傳多個文件,每上傳一個文件就會調用一次。
的問題是,我得到這個錯誤:
Database Error
Error: SQLSTATE[42000]:
[Microsoft][SQL Server Native Client 11.0][SQL Server]
SQLServerAgent Error: Request to run job ProcessTests
(from User [redacted]) refused because the job already has
a pending request from User [redacted].
SQL Query: exec sproc_runjob_ProcessTests
據我所知,這意味着存儲過程不能同時運行 - 我會運行每個存儲過程這是我們看中的新型多核服務器的恥辱。
解決方案,我們已經想到了
運行存儲過程連續
基本上這裏的想法是一次調用存儲過程,則忽略它的失敗,如果它已經運行。在sproc調用結束時,它會檢查數據庫,看它是否需要再次運行(如果有「新」文件),並在這種情況下再次運行。
不要使用現有的存儲過程
這將是困難的,因爲時間的限制,但是如果有人對我們應該做這樣的方式一個很好的建議,我會很高興聽到。
在此先感謝!
搜索結果
看起來this guy有同樣的問題,並通過調用之前檢查作業狀態解決它。也許我可以在進行sproc調用之前從PHP執行此操作?
Here's a mention一個叫做Service Broker的東西。這可能實際上是我正在尋找的,但我仍然喜歡任何輸入。
在此先感謝!