Как вы можете отменить процесс выполнения 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);
 Joel Coehoorn07 июл. 2009 г., 16:04
Обратите больше внимания на выбор тегов - теги - это то, как вы связываете свой вопрос с соответствующей аудиторией.

Ответы на вопрос(4)

sp_who2

Список отображаемых процессов

Find you SPID 

Kill SPID

Если появляется сообщение об ошибке, вы не можете убить свой собственный процесс.

Посмотрите, где находится процесс в вашей студии управления, и остановите его.

Или закройте текущее соединение и снова откройте и попробуйте убить сейчас.

использованиеKILL с идентификатором процесса:

KILL 53;

Просто знайте, что вы не можете убить свой собственный spid, вам нужно создать другое соединение, а затем убить spid из

если вы попытаетесь убить свой собственный SPID, вы получите следующую ошибку

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

Убийство @Spid

обратите внимание, что это последнее усилие. Вы должны просто закрыть соединение на клиенте, чтобы завершить процесс.

 07 июл. 2009 г., 16:09
Просто знайте, что вы не можете убить свой собственный spid, вам нужно создать другое соединение, а затем убить spid из

    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);
 13 нояб. 2009 г., 17:33
Предложение BeginExecuteNonQuery () хорошо, но EndExecuteNonQuery не отменяет команду - она блокируется, пока команда не завершится.

Ваш ответ на вопрос