2012-06-11 5 views
6

После выполнения этого запроса на master db он дает мне весь рабочий процесс во всех базах данных, есть ли какой-либо запрос, который убьет весь процесс, запущенный в базе данных.Как убить/Завершить весь выполняющийся процесс на 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

«который будет убивать весь процесс работает на базе» - теперь с какой стати кто-то хочет сделать это ! –

+0

@mitch: мы тестируем наши фиктивные базы данных, поэтому вам не нужно беспокоиться – Buzz

+1

С какой целью? Если вы хотите, например, перейдите в однопользовательский режим, есть способы заставить всех остальных отключиться (['ROLLBACK IMMEDIATE'] (http://msdn.microsoft.com/en-us/library/bb522682.aspx)) –

ответ

16

Если вы хотите, чтобы все другие соединения, чтобы отключить, и у вас есть соответствующие разрешения, вы можете подпрыгивать базу данных в и из single user mode:

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

Любое другое подключение к та же база данных будет прекращена.

+0

«ALTER DATABASE current ...» поддерживается только с SQL Server 2012 и переадресовывается – Sharken

+0

@Sharken - да, 'current' поддерживается только в 2012 году. Для более ранних версий вы должны назвать базу данных. –

+0

Ты просто спас мне жизнь! – Bobby

1

Вы можете использовать KILL заявление в сочетании с курсором на выше результата запроса.

См Kill (Transact-SQL)

+3

Да, вы могли бы .... но вы были бы сумасшедшими .... –

1

Пожалуйста, смотрите ниже 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 [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

Это разумный способ убить процессы, спасибо человеку –

Смежные вопросы