2009-07-07 10 views
6

Powiedzmy trzeba wykonać następujące (długie jazdy) proces z kodu:Jak można anulować proces realizacji SQL Server programowo

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

Czy istnieje sposób programowo wywołać SQL Server, aby anulować proces, jeśli trwa to zbyt długo (jakbyś uderzył w przycisk "Stop" w QueryAnalyzer)?

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

Zwróć szczególną uwagę na wybór tagów - tagi to sposób połączenia pytania z odpowiednimi odbiorcami. –

Odpowiedz

4

Kill @Spid

uwaga, że ​​jest to ostatni wysiłek. powinieneś po prostu zamknąć połączenie na kliencie, aby zabić proces.

+0

Po prostu pamiętaj, że nie możesz zabić własnego spidera, musisz utworzyć kolejne połączenie, a następnie zabić spid z poziomu – SQLMenace

5

użycie KILL z identyfikatorem procesu:

KILL 53; 

Wystarczy mieć świadomość, że nie można zabić własną spid, trzeba utworzyć innego połączenia, a następnie zabić spid z

jeśli ciebie zabić własną SPID otrzymasz następujący błąd

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

trzeba uruchomić zapytanie asynchronicznie, co następuje:

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(); 

Aby anulować polecenie, uruchom to:

_anotherCommand.EndExecuteNonQuery(_anotherCommandStarted); 
+1

. Sugestia BeginExecuteNonQuery() jest dobra, ale EndExecuteNonQuery nie anuluje polecenia - blokuje się, dopóki polecenie nie zostanie zakończone . – Mike

0
sp_who2 

Lista procesu wyświetla

Find you SPID 

Kill SPID 

Jeśli komunikat o błędzie nie można zabić własnego procesu

Zobacz, gdzie przebiega proces w Twoim studiu zarządzania i zatrzymaj go.

Lub zamknij bieżące połączenie i otwórz ponownie i spróbuj teraz zabić.