首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL Server 批量終止用戶進程存儲過程 kill2 實現

     編輯:MySQL 資料庫相關知識

原生 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'終止連接指定數據庫的所有會話

核心邏輯解析

  1. 參數預處理:移除空格,依次判斷是否包含 -、,、= 分隔符。
  2. 區間模式:解析起止 SPID,循環檢查 master.dbo.sysprocesses 存在性並執行 KILL。
  3. 列表模式:分割逗號分隔的 SPID 字符串,逐個驗證終止。
  4. 數據庫模式:游標查詢 DB_NAME(dbid) = 目標庫 的所有 SPID,逐個終止。
  5. 單一模式:直接驗證並終止單一 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 參數,僅打印不執行,便於演練。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved