【发布时间】:2010-11-21 06:25:16
【问题描述】:
我可以看到这样的打开过程:
select spid from master..sysprocesses where db_name(dbid)='MyDB'
我可以像这样杀死进程:kill 54
但是我怎样才能杀死一个以上的进程呢?
我需要杀死我的选择...查询返回给我的所有打开进程
先谢谢了
【问题讨论】:
标签: sql-server-2008
我可以看到这样的打开过程:
select spid from master..sysprocesses where db_name(dbid)='MyDB'
我可以像这样杀死进程:kill 54
但是我怎样才能杀死一个以上的进程呢?
我需要杀死我的选择...查询返回给我的所有打开进程
先谢谢了
【问题讨论】:
标签: sql-server-2008
在繁忙的站点上,一旦您杀死它们,连接就会再次弹出。你需要这个吗?
ALTER DATABASE MyDB SET single_user WITH ROLLBACK IMMEDIATE
/*Do your task here*/
ALTER DATABASE MyDB SET multi_user
【讨论】:
如果您想将它们全部杀死,请考虑使用游标循环遍历结果的每一行。您可能可以将其封装在 SP 中以方便使用。
【讨论】:
我通常将动态 SQL 用于此类事情。比一次杀死 50 个进程要好得多,但显然您要谨慎对待 WHERE 子句中包含的内容,并确保您只杀死您打算杀死的进程,没有撤消按钮。
DECLARE @Sql NVARCHAR(MAX) = (
SELECT STRING_AGG(CONCAT (
'KILL '
, p.spid
), CHAR(10))
FROM sys.sysprocesses p
WHERE p.hostname = 'whatever'
)
exec(@Sql)
【讨论】: