原生 KILL 命令僅支援單一 SPID 終止,面對批量清理會話、按數據庫斷開連接等場景顯得力不從心。本文提供增強版存儲過程 kill2,支援四種調用模式,大幅提升運維效率。
| 調用示例 | 效果 |
|---|---|
EXEC kill2 '51-57' | 終止 SPID 51 至 57 區間內所有會話 |
EXEC kill2 '58' | 終止單一 SPID 58 |
EXEC kill2 '51,56,100,58' | 終止指定多個離散 SPID |
EXEC kill2 'DB=MyDatabase' | 終止連接指定數據庫的所有會話 |
-、,、= 分隔符。master.dbo.sysprocesses 存在性並執行 KILL。DB_NAME(dbid) = 目標庫 的所有 SPID,逐個終止。USE master;
GO
IF EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID('kill2') AND type IN ('P','PC'))
DROP PROCEDURE kill2;
GO
SET CONCAT_NULL_YIELDS_NULL OFF;
GO
CREATE PROCEDURE kill2 @param2 VARCHAR(500)
AS
BEGIN
-- 完整實現代碼見原文,含四種模式分支邏輯
-- 關鍵點:動態構建 KILL 命令 -> EXEC(@killcmd)
-- 並過濾系統進程
END
GO
spid > 50 的用戶進程,保護系統進程。DB= 模式,建議先用 sp_who2 確認影響範圍。@dryrun 參數,僅打印不執行,便於演練。