如何在Sql Server 2008上终止/终止所有正在运行的进程

时间:2012-06-11 07:48:18

标签: sql-server-2008 database-deadlocks

在master db上执行此查询后,它会在所有数据库上为我提供所有正在运行的进程, 是否有任何查询将杀死在数据库上运行的所有进程。

USE
Master
GO

SELECT
SPID,DBID FROM SYSPROCESSES
WHERE
DBID NOT IN (1,2,3,4) AND SPID >50 AND SPID<> @@spid   

3 个答案:

答案 0 :(得分:19)

如果您想强制断开所有其他连接,并且您拥有合适的权限,则可以将数据库退出single user mode

alter database current set single_user with rollback immediate;
go
alter database current set multi_user;
go

将终止与同一数据库的任何其他连接。

答案 1 :(得分:1)

您可以在上面的查询结果中使用KILL语句和游标。

请参阅Kill (Transact-SQL)

答案 2 :(得分:1)

请参阅下面的SQL脚本以终止给定数据库的所有进程(SQL Server 2014)

Declare @DbName nvarchar(60)='YourDBName'  
Declare @SPID int  

--get all processes  
DECLARE @Table TABLE(  
    SPID INT,  
    Status VARCHAR(MAX),  
    LOGIN VARCHAR(MAX),  
    HostName VARCHAR(MAX),  
    BlkBy VARCHAR(MAX),  
    DBName VARCHAR(MAX),  
    Command VARCHAR(MAX),  
    CPUTime INT,  
    DiskIO INT,  
    LastBatch VARCHAR(MAX),  
    ProgramName VARCHAR(MAX),  
    SPID_1 INT,  
    REQUESTID INT  
)  

INSERT INTO @Table EXEC sp_who2  
--using cursor to kill all processes  
Declare cur_KillAllProcesses CURSOR FAST_FORWARD FOR  
Select   
SPID  
From @Table  
WHERE DBName=@DbName  
OPEN cur_KillAllProcesses  

FETCH NEXT FROM cur_KillAllProcesses INTO   
@SPID  

WHILE @@FETCH_STATUS=0  
BEGIN  

--add kill process command  

Exec('KILL '+ @SPID)  


FETCH NEXT FROM cur_KillAllProcesses INTO @SPID  

END  

CLOSE cur_KillAllProcesses  
DEALLOCATE cur_KillAllProcesses