web-dev-qa-db-ja.com

SQL Server 2008で実行中のすべてのプロセスを強制終了/終了する方法

マスターdbでこのクエリを実行した後、すべてのデータベースで実行中のすべてのプロセスを取得しています。データベースで実行中のすべてのプロセスを強制終了するクエリがあります。

USE
Master
GO

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

他のすべての接続を強制的に切断したい場合、適切な権限があれば、データベースを シングルユーザーモード でバウンスできます。

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

同じデータベースへの他の接続は終了されます。

20

特定のデータベースのすべてのプロセスを強制終了するには、以下の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   
2
Satbir

上記のクエリ結果では、KILLステートメントをカーソルと組み合わせて使用​​できます。

Kill(Transact-SQL) を参照

1
Omnius