データベースへのすべての接続を切断するスクリプト(RESTRICTED_USER ROLLBACK以上)質問する

データベースへのすべての接続を切断するスクリプト(RESTRICTED_USER ROLLBACK以上)質問する

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); 

おすすめ記事