Articolo di Andrea Benedetti
Può capitare di dover killare tutti i processi che sono attivi (magari rimasti appesi o comunque dormienti) su un determinato database.
Interrogando la vista di sistema sys.sysprocesses siamo in grado di recuperare l'elenco (gli SPID) dei processi legati ad uno specifico db.
Trovata la lista chiamo la KILL su ogni singolo SPID recuperato.
Esempio:
Use Master
go
DECLARE @DatabaseName varchar(50)
Set @DatabaseName = 'nomeDelMioDatabase'
DECLARE SysProc CURSOR LOCAL FORWARD_ONLY DYNAMIC READ_ONLY FOR
SELECT spid FROM sys.sysprocesses
WHERE dbid = (SELECT DB_ID(@DatabaseName) )
And SPID <> @@SPID
DECLARE @SysProcId smallint
OPEN SysProc
FETCH NEXT FROM SysProc INTO @SysProcId
DECLARE @KillStatement char(30)
WHILE @@FETCH_STATUS = 0
BEGIN
SET @KillStatement = 'KILL ' + CAST(@SysProcId AS char(30))
EXEC (@KillStatement)
--> Print @KillStatement
FETCH NEXT FROM SysProc INTO @SysProcId
END