Как убить / завершить весь запущенный процесс на Sql Server 2008

после выполнения этого запроса на 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 ответов


Если вы хотите принудительно отключить все другие соединения, и у вас есть подходящие разрешения, вы можете отказов базы данных в и из однопользовательском режиме:

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

любое другое соединение с той же базой данных будет прекращено.


можно использовать KILL оператор в сочетании с курсором на вышеуказанный результат запроса.

посмотреть Kill (Transact-SQL)


смотрите ниже SQL script, чтобы убить все процессы для данной базы данных (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