假设您已从代码中执行以下(长时间运行)过程:
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);
答案 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);