如何以编程方式取消SQL Server执行过程

时间:2009-07-07 13:44:39

标签: sql sql-server tsql

假设您已从代码中执行以下(长时间运行)过程:

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

如果花费太长时间(有点像点击QueryAnalyzer中的“停止”按钮),有没有办法以编程方式调用SQL Server取消进程?

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

4 个答案:

答案 0 :(得分:7)

KILL与进程ID:

一起使用
KILL 53;

请注意,你不能杀死你自己的spid,你需要创建另一个连接,然后从

中杀死spid

如果您尝试杀死自己的SPID,则会出现以下错误

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

答案 1 :(得分:4)

Kill @Spid

请注意,这是最后的努力。你应该关闭客户端上的连接以终止进程。

答案 2 :(得分:1)

$oldhost = "RBABBITT1"
$oldip = "192.168.1.21"
$olddriveletter = "C"

$newhost = "RBABBITT2"
$newip = "192.168.1.22"
$newdriveletter = "D"


$path = "\\$newip\$newdriveletter$\test1"
$exclude = "$path\tools\*"
$files = get-childitem $path -Recurse | where-object{$_.fullname -notlike $exclude -and $_.PSIsContainer -eq $false}
$files | %{
    (gc $_.FullName) -replace $oldhost, $newhost -replace $oldip, $newip -replace [regex]::Escape("${olddriveletter}:\Website"), "${newDriveLetter}:\Website" | set-content $_.fullname
}

流程显示列表

sp_who2

如果出现错误消息,则无法取消您自己的流程

查看管理工作室中的流程在哪里停止并停止。

或关闭当前连接并重新打开并尝试立即杀死。

答案 3 :(得分: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);