2012-06-11 11 views
6

Después de ejecutar esta consulta en master db, me está dando todo el proceso en todas las bases de datos, hay alguna consulta que matará a todos los procesos que se ejecutan en una base de datos.Cómo matar/Terminar todo el proceso en ejecución en Sql Server 2008

USE 
Master 
GO 

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

"que matará a todos los procesos que se ejecutan en una base de datos" - ahora por qué en la tierra alguien querría hacer eso ! –

+0

@mitch: estamos probando en nuestras bases de datos ficticias, por lo que no debe preocuparse – Buzz

+1

¿Para qué? Si quiere, por ejemplo, vaya al modo de usuario único, hay formas de obligar a todos los demás a desconectarse (['ROLLBACK IMMEDIATE'] (http://msdn.microsoft.com/en-us/library/bb522682.aspx)) –

Respuesta

16

Si desea forzar todos los demás conexión para desconectar, y usted tiene los permisos adecuados, puede rebotar la base de datos dentro y fuera de single user mode:

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

Cualquier otra conexión con el misma base de datos terminará.

+0

"ALTER DATABASE current ..." solo es compatible con SQL Server 2012 y reenviar – Sharken

+0

@Sharken - sí, 'current' solo es compatible en 2012. Para versiones anteriores, debe nombrar la base de datos. –

+0

¡Acabas de salvar mi vida! – Bobby

1

Puede utilizar la instrucción KILL combinado con un cursor en el resultado de la consulta anterior.

Ver Kill (Transact-SQL)

+3

Sí, podría ... pero estaría loco por ... –

1

favor ver más abajo secuencia de comandos SQL para matar todos los procesos para una determinada base de datos (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 [email protected] 
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 
+0

Es la manera razonable de matar procesos, Gracias hombre –