Что такое команда SQL для принудительного закрытия всех других подключений к базе данных - PullRequest
3 голосов
/ 25 мая 2010

Что такое команда SQL для принудительного закрытия всех других подключений к базе данных. Это для SQL Server 2008

Ответы [ 2 ]

9 голосов
/ 25 мая 2010

В одну сторону, используя ROLLBACK IMMEDIATE

ALTER DATABASE foo SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

Вы можете использовать KILL, но также хотите предотвратить повторные подключения.

2 голосов
/ 25 мая 2010

Используйте оператор Kill , чтобы закрыть одно соединение:

Завершает пользовательский процесс, который на основе идентификатора сеанса (SPID в SQL 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...