質問: データベースへのすべての接続を切断するためのスクリプト(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を実行して接続を強制終了することができますが、自動ビルドでこれを行うための自動的な方法が必要です。 (今回は私の接続は、私がドロップしようとしているデータベース上の唯一のものですが。)誰が接続しているかに関わらず私のデータベースを削除できるスクリプトはありますか?
回答: 受け入れられた回答には、接続されているもの以外のデータベース内のテーブルを含むクエリを実行している接続によってデータベースがロックされる可能性があることを考慮していないという欠点があります。これは、サーバーインスタンスに複数のデータベースがあり、クエリで直接または間接的に(たとえば同義語を介して)複数のデータベースのテーブルを使用している場合などです。したがって、killするための接続を見つけるには、syslockinfoを使用することをお勧めします。したがって、私の提案は、以下のalexkからの回答のバリエーションを使用することです。use [master]; declare @kill varchar(8000) = ''; select @kill = @kill + 'kill ' + convert(varchar(5), req_spid) + ';' from master.dbo.syslockinfo where rsc_type = 2 and rsc_dbid = db_id('mydb') exec(@kill);