Sql-Server
我可以啟動一個儲存過程並立即返回而不等待它完成嗎?
我們有一個儲存過程,使用者可以手動執行該儲存過程,以獲取全天不斷使用的報告的一些更新數字。
我有第二個儲存過程應該在第一個儲存過程執行之後執行,因為它基於從第一個儲存過程獲得的數字,但是它需要更長的時間執行並且是一個單獨的程序,所以我不想在第二個儲存過程執行時讓使用者等待。
有沒有辦法讓一個儲存過程啟動第二個儲存過程,並立即返回而不等待結果?
我正在使用 SQL Server 2005。
看起來有多種方法可以實現這一點,但我發現最簡單的方法是Martin 建議在 SQL 作業中設置過程,並使用我的儲存過程中的非同步sp_start_job命令啟動它。
EXEC msdb.dbo.sp_start_job @job_name='Run2ndStoredProcedure'
這僅適用於我,因為我不需要為我的儲存過程指定任何參數。
其他可能會根據您的情況起作用的建議是
- 使用Martin和Sebastian建議的SQL Service Broker 。如果您不介意設置和了解其工作原理的複雜性,這可能是最好的建議。
- 在負責執行儲存過程的程式碼中非同步執行該過程,就像Mr.Brownstone 建議的那樣。
不錯的主意,但是在我的情況下,儲存過程是從多個地方呼叫的,因此找到所有這些地方並確保它們也呼叫第二個過程似乎並不實用。此外,第二個儲存過程非常關鍵,忘記執行它可能會給我們公司帶來一些重大問題。
- 讓第一個過程設置一個標誌,並設置一個重複的作業來檢查該標誌並在其設置時執行,就像Jimbo 建議的那樣。我不喜歡持續執行並每隔幾分鐘檢查一次更改的工作,但根據您的情況,這當然是一個值得考慮的選項。