2009-07-07 26 views
6

Digamos que usted tiene ejecutar el proceso siguiente (de larga data) de su código:Cómo se puede cancelar un proceso de ejecución de SQL Server mediante programación

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

¿Hay una manera de llamar mediante programación de SQL Server para cancelar el proceso si está tardando demasiado (algo así como presionar el botón "Parar" en QueryAnalyzer)?

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

Preste más atención a las opciones de etiquetas: las etiquetas son cómo conecta su pregunta con la audiencia adecuada. –

Respuesta

4

Kill @SPID

nota que este es un último esfuerzo. solo debe cerrar la conexión en el cliente para matar el proceso.

+0

Simplemente tenga en cuenta que no puede matar a su spid, necesita crear otra conexión y luego eliminar el spid del – SQLMenace

5

uso KILL con el identificador de proceso:

KILL 53; 

Sólo ten en cuenta que no se puede matar a su propio SPID, es necesario crear otra conexión y luego matar al SPID de la

si tratar de matar a su propio SPID obtendrá el siguiente error

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

tiene que ejecutar la consulta de forma asíncrona, de la siguiente manera:

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

Para cancelar el comando, ejecute lo siguiente:

_anotherCommand.EndExecuteNonQuery(_anotherCommandStarted); 
+1

La sugerencia BeginExecuteNonQuery() es buena, pero EndExecuteNonQuery no cancela el comando - bloquea hasta que el comando finalice . – Mike

0
sp_who2 

Lista de proceso muestra

Find you SPID 

Kill SPID 

Si mensaje de error que no se puede matar a su propio proceso de

Vea dónde se encuentra el proceso en su estudio de administración y deténgalo.

O cierre la conexión actual y vuelva a abrir y trate de matar ahora.

Cuestiones relacionadas