【问题标题】:What is the SQL command to forcibly close all other connections to the a database强制关闭与数据库的所有其他连接的SQL命令是什么
【发布时间】:2026-02-19 18:00:02
【问题描述】:

什么是强制关闭与数据库的所有其他连接的 SQL 命令。 这是针对 SQL Server 2008 的

【问题讨论】:

    标签: sql sql-server sql-server-2008


    【解决方案1】:

    一种使用ROLLBACK IMMEDIATE的方式

    ALTER DATABASE foo SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    

    您可以使用 KILL,但也想防止重新连接。

    【讨论】:

      【解决方案2】:

      使用Kill 语句关闭单个连接:

      终止一个用户进程 基于会话 ID(SQL 中的 SPID Server 2000 及更早版本)

      无需进一步评论,这是我们多年来断断续续使用的存储过程,用于关闭所有连接,使用 kill。我确信有更好的/非光标方式来做到这一点。

      CREATE PROCEDURE kill_database_users @arg_dbname sysname
      AS
      
      declare @a_spid smallint
      declare @msg    varchar(255)
      declare @a_dbid int
      
      select
          @a_dbid = sdb.dbid
      from    master..sysdatabases sdb
      where   sdb.name = @arg_dbname
      
      declare db_users insensitive cursor for
      select
          sp.spid
      from    master..sysprocesses sp
      where   sp.dbid = @a_dbid
      
      open db_users
      
      fetch next from db_users into @a_spid
      while @@fetch_status = 0
          begin
          select @msg = 'kill '+convert(char(5),@a_spid)
          print @msg
          execute (@msg)
          fetch next from db_users into @a_spid
          end
      
      close db_users
      deallocate db_users
      

      【讨论】:

        最近更新 更多