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 に答える