首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 強制終止 SQL Server 連接進程:避免誤殺自身 SPID 的存儲過程方案

     編輯:程式設計綜合問答

問題

循環執行 `KILL @spid` 時,若包含當前連接的 SPID,會報錯「不能終止自身進程」。

解決:動態構建排除自身的 KILL 腳本

CREATE PROCEDURE dbo.usp_KillOtherSpids @dbname sysname
AS
BEGIN
    DECLARE @sql nvarchar(max) = N'';
    SELECT @sql += N'KILL ' + CAST(spid AS varchar(10)) + N';'
    FROM sys.sysprocesses
    WHERE dbid = DB_ID(@dbname)
      AND spid != @@SPID; -- 排除自身
    EXEC sp_executesql @sql;
END

調用方式

using (var cmd = conn.CreateCommand()) {
    cmd.CommandText = "usp_KillOtherSpids";
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@dbname", "YourDB");
    cmd.ExecuteNonQuery();
}

優勢

  • 單次往返,效率高。
  • 自動排除 `@@SPID`,避免自我終止。
  • 可擴展過濾條件(如登錄時間、程序名)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved