我在我的應用程序中調用一個存儲過程,這需要很長時間刪除數據庫中的記錄。我意識到如果我在執行過程中殺死了我的應用程序進程,那麼停止刪除記錄。即使在客戶進程被終止時也執行長時間運行的SQL查詢
我試過SqlCommand.ExecuteNonQuery
和SqlCommand.BeginExecuteNonQuery
,但都具有相同的效果。
有沒有辦法啓動一個SQL查詢執行到最後,無論客戶端發生了什麼?
更新: 在這種情況下,我希望進程異步運行,最好是參數化。
我在我的應用程序中調用一個存儲過程,這需要很長時間刪除數據庫中的記錄。我意識到如果我在執行過程中殺死了我的應用程序進程,那麼停止刪除記錄。即使在客戶進程被終止時也執行長時間運行的SQL查詢
我試過SqlCommand.ExecuteNonQuery
和SqlCommand.BeginExecuteNonQuery
,但都具有相同的效果。
有沒有辦法啓動一個SQL查詢執行到最後,無論客戶端發生了什麼?
更新: 在這種情況下,我希望進程異步運行,最好是參數化。
您可以將過程添加到SQL Server作業並執行SQL Server作業,而不是該過程。
USE msdb ;
GO
EXEC dbo.sp_start_job N'Weekly Sales Data Backup' ;
GO
你如何回答不知道問題細節的問題?如果在數據輸入過程中發生DELETE,他不能使用sql-job。 – FLICKER
爲什麼你認爲有問題?他只是想開始一些不會在連線斷線時死亡的東西。 Offcourse可以在其他數據導入時啓動sql作業。這就是爲什麼我們有lockinh機制。好的併發性可能會出現問題......但那不是現在的問題。 – Jeffrey
我在評論中提到了原因。 OP說他有一個應用程序,在他的應用程序中,他調用刪除記錄的過程,我假定在刪除記錄後,他的代碼正在做其他事情,所以這不能是異步的。他的應用程序必須等待記錄被刪除,然後繼續執行應用程序代碼。他不清楚情況,任何答案都可能是正確/錯誤/誤導或混淆。 – FLICKER
爲什麼需要很長時間?你是否刪除了數百萬條記錄?或者你是否正在刪除一個巨大的表中的記錄?在連接終止後,無法繼續執行查詢。 – FLICKER
所以沒有'火和忘記'? –
不,沒有,除非你執行一項工作 – FLICKER