2009-07-07 11 views
6

Disons que vous avez exécuter le processus suivant (long cours d'exécution) à partir de votre code:Comment pouvez-vous annuler un processus d'exécution SQL Server programme

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

Est-il possible d'appeler programatically SQL Server pour annuler le processus si cela prend trop de temps (un peu comme cliquer sur le bouton "Stop" dans QueryAnalyzer)?

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

S'il vous plaît prêter plus d'attention à vos choix de balises - les étiquettes sont la façon dont vous vous connectez votre question à l'auditoire approprié. –

Répondre

4

Kill @Spid

noter que ceci est un dernier effort. vous devriez simplement fermer la connexion sur le client pour tuer le processus.

+0

Sachez que vous ne pouvez pas tuer votre spid, vous devez créer une autre connexion et ensuite tuer le spid à partir de – SQLMenace

5

utilisation KILL avec l'ID de processus:

KILL 53; 

Sachez simplement que vous ne pouvez pas tuer votre propre SPID, vous devez créer une autre connexion, puis tuer le SPID de la

si vous essayez de tuer votre propre SPID vous obtiendrez l'erreur suivante

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

vous devez exécuter votre requête de manière asynchrone, comme suit:

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

Pour annuler la commande, exécutez:

_anotherCommand.EndExecuteNonQuery(_anotherCommandStarted); 
+1

La suggestion BeginExecuteNonQuery() est bonne, mais EndExecuteNonQuery n'annule pas la commande - elle bloque jusqu'à la fin de la commande . – Mike

0
sp_who2 

Liste des processus affiche

Find you SPID 

Kill SPID 

Si un message d'erreur vous ne pouvez pas tuer votre propre processus

Voyez où se trouve le processus dans votre studio de gestion et arrêtez-le. Ou fermer la connexion actuelle et rouvrir et essayer de tuer maintenant.

Questions connexes