2009-07-07 62 views
6

比方說,你必須從你的代碼執行以下(長時間運行)過程:你怎麼能取消的SQL Server執行過程編程

int processID = DB.Execute(SQL); //some long running sql statement 

有沒有一種方法以編程方式調用SQL Server來取消的話進程它需要很長時間(有點像在QueryAnalyzer中點擊「停止」按鈕)?

//cancel the process if it is taking too long 
DB.Execute("sp_CancelProcess @ProcessID=" + processID); 
+1

請多關注您的標籤選擇 - 標籤是您如何將您的問題與適當的受衆連接起來的方式。 – 2009-07-07 14:04:45

回答

4

Kill @Spid

注意,這是最後的努力。你應該關閉客戶端上的連接來終止進程。

+0

只要知道你不能殺死你自己的spid,你需要創建另一個連接,然後從 – SQLMenace 2009-07-07 14:09:16

5

使用KILL進程ID:

KILL 53; 

要知道,你不能終止自己的spid,您需要創建另一個連接,然後殺死從

的SPID如果您試圖殺死自己的SPID您將收到以下錯誤

Server: Msg 6104, Level 16, State 1, Line 1 
Cannot use KILL to kill your own process. 
0

你必須異步運行您的查詢,如下所示:

SqlConnection _anotherConnection; 
    SqlCommand _anotherCommand; 
    IAsyncResult _anotherCommandStarted; 
    _anotherCommand = _anotherConnection.CreateCommand(); 
    _anotherCommand.CommandText = string.Format("SET DEADLOCK_PRIORITY HIGH; BEGIN TRANSACTION; {0};", hookCommand); 
    _anotherCommand.CommandType = CommandType.Text; 
    _anotherCommand.ExecuteNonQuery(); 
    _anotherCommand.CommandText = "UPDATE Data.Hook1 SET i=1-i"; 
    _anotherCommandStarted = _anotherCommand.BeginExecuteNonQuery(); 

要取消命令,運行此:

_anotherCommand.EndExecuteNonQuery(_anotherCommandStarted); 
+1

殺死spid BeginExecuteNonQuery()建議是好的,但EndExecuteNonQuery不會取消該命令 - 它會阻塞,直到命令完成。 – Mike 2009-11-13 16:33:15

0
sp_who2 

進程列表顯示

Find you SPID 

Kill SPID 

如果錯誤信息不能殺自己的進程

看看您的管理工作室中的流程在哪裏停止並停止。

或關閉當前連接並重新打開並嘗試立即終止。