SQL Server 2005データベースへの現在の接続をすべて削除する方法
データベースの名前を変更したいのですが、データベースに 'couldn't get exclusive lock' というエラーが出続けています。
データベースの名前を変更できるように、データベースへの接続をすべて削除するにはどうすればいいですか?

Answer 1 SQLMenace
Adamが提案したアプローチが機能しない理由は、アクティブな接続をループしている間に新しい接続を確立でき、それらを見逃してしまうためです。代わりに、この欠点のない次のアプローチを使用できます。
-- set your current connection to use master otherwise you might get an error
use master
ALTER DATABASE YourDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE
--do you stuff here
ALTER DATABASE YourDatabase SET MULTI_USER
Answer 2 Adam
これを実現するためのスクリプトは、'DB_NAME'をデータベースに置き換えて、すべての接続を終了させます。
USE master
GO
SET NOCOUNT ON
DECLARE @DBName varchar(50)
DECLARE @spidstr varchar(8000)
DECLARE @ConnKilled smallint
SET @ConnKilled=0
SET @spidstr = ''
Set @DBName = 'DB_NAME'
IF db_id(@DBName) < 4
BEGIN
PRINT 'Connections to system databases cannot be killed'
RETURN
END
SELECT @spidstr=coalesce(@spidstr,',' )+'kill '+convert(varchar, spid)+ '; '
FROM master..sysprocesses WHERE dbid=db_id(@DBName)
IF LEN(@spidstr) > 0
BEGIN
EXEC(@spidstr)
SELECT @ConnKilled = COUNT(1)
FROM master..sysprocesses WHERE dbid=db_id(@DBName)
END
Answer 3 btk
殺せ、火で殺せ。
USE master
go
DECLARE @dbname sysname
SET @dbname = 'yourdbname'
DECLARE @spid int
SELECT @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname)
WHILE @spid IS NOT NULL
BEGIN
EXECUTE ('KILL ' + @spid)
SELECT @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname) AND spid > @spid
END
Answer 4 Joseph Daigle
SQL Management Studio Expressを使用しています。
オブジェクトエクスプローラのツリーで、管理の下にある「アクティビティモニタ」をドリルダウンします(そこに見つからない場合は、データベースサーバーを右クリックして「アクティビティモニタ」を選択します)。アクティビティモニタを開くと、すべてのプロセス情報を見ることができます。興味のあるデータベースのロックを見つけ、それらのロックを削除することができます。
その後に名前を変更できるようにしてください。
Answer 5 brendan
いつも使っています。
ALTER DATABASE DB_NAME SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
SP_RENAMEDB 'DB_NAME','DB_NAME_NEW'
Go
ALTER DATABASE DB_NAME_NEW SET MULTI_USER -- set back to multi user
GO