上所有正在运行的进程的主数据库执行这个查询,它给我的所有数据库中所有正在运行的进程后, 有任何疑问这将杀死一个数据库上运行的所有进程。如何杀死/终止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
上所有正在运行的进程的主数据库执行这个查询,它给我的所有数据库中所有正在运行的进程后, 有任何疑问这将杀死一个数据库上运行的所有进程。如何杀死/终止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
如果要强制所有其他的连接断开,并且您有合适的权限,您可以进出的single user mode反弹数据库:
alter database current set single_user with rollback immediate;
go
alter database current set multi_user;
go
到任何其他连接同一个数据库将被终止。
请参见下面的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
这是杀死进程的合理方式,谢谢 –
“这将杀死所有进程上运行数据库”的所有进程 - 现在为什么地球上会有人想这样做! –
@mitch:我们正在测试我们的虚拟数据库,所以不用担心 – Buzz
为了什么目的?如果你想要例如转到单用户模式,有办法强制其他人断开连接(['ROLLBACK IMMEDIATE'](http://msdn.microsoft.com/zh-cn/library/bb522682.aspx)) –