10

在主数据库上执行此查询后,它给了我所有数据库上所有正在运行的进程,是否有任何查询会杀死数据库上运行的所有进程。

USE
Master
GO

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

3 回答 3

23

如果你想强制所有其他连接断开,并且你有合适的权限,你可以将数据库弹入和退出单用户模式

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

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

于 2012-06-11T08:02:00.260 回答
3

请参阅下面的 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   
于 2016-08-03T18:34:51.877 回答
2

您可以KILL在上述查询结果上使用结合游标的语句。

请参见Kill (Transact-SQL)

于 2012-06-11T07:52:47.050 回答