Вопрос по sql, tsql, sql-server – Как вы можете отменить процесс выполнения SQL Server программно

6

Допустим, вы выполнили следующий (длительный) процесс из своего кода:

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 Coehoorn

Ваш Ответ

4   ответа
4

Убийство @Spid

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

Просто знайте, что вы не можете убить свой собственный spid, вам нужно создать другое соединение, а затем убить spid из
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);
Предложение BeginExecuteNonQuery () хорошо, но EndExecuteNonQuery не отменяет команду - она блокируется, пока команда не завершится.
1
sp_who2

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

Find you SPID 

Kill SPID

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

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

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

6

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

KILL 53;

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

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

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

Похожие вопросы