Visual Studio データベース プロジェクトから (TFS 自動ビルド経由で) 頻繁に再デプロイされる開発データベースがあります。
ビルドを実行すると、次のエラーが発生することがあります:
ALTER DATABASE failed because a lock could not be placed on database 'MyDB'. Try again later.
ALTER DATABASE statement failed.
Cannot drop database "MyDB" because it is currently in use.
私はこれを試しました:
ALTER DATABASE MyDB SET RESTRICTED_USER WITH ROLLBACK IMMEDIATE
しかし、まだデータベースを削除できません。(ほとんどの開発者がdbo
アクセス権を持っていると推測します。)
手動で実行しSP_WHO
て接続の切断を開始できますが、自動ビルドでこれを自動的に行う方法が必要です。(ただし、今回は、切断しようとしているデータベース上の接続は私の接続のみです。)
誰が接続しているかに関係なくデータベースを削除できるスクリプトはありますか?
ベストアンサー1
更新しました
MS SQL Server 2012 以降の場合
USE [master];
DECLARE @kill varchar(8000) = '';
SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), session_id) + ';'
FROM sys.dm_exec_sessions
WHERE database_id = db_id('MyDB')
EXEC(@kill);
MS SQL Server 2000、2005、2008 の場合
USE master;
DECLARE @kill varchar(8000); SET @kill = '';
SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), spid) + ';'
FROM master..sysprocesses
WHERE dbid = db_id('MyDB')
EXEC(@kill);