Vac*_*ano 214 sql t-sql sql-server sql-server-2008 sql-server-2008-r2
我有一个开发数据库,经常从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.
Run Code Online (Sandbox Code Playgroud)
我试过这个:
ALTER DATABASE MyDB SET RESTRICTED_USER WITH ROLLBACK IMMEDIATE
Run Code Online (Sandbox Code Playgroud)
但我仍然无法删除数据库.(我的猜测是大多数开发人员都dbo可以访问.)
我可以手动运行SP_WHO并开始查杀连接,但我需要一种自动方式在自动构建中执行此操作.(虽然这次我的连接是我试图丢弃的数据库中唯一的连接.)
是否有一个脚本可以删除我的数据库,无论谁连接?
Ale*_*exK 595
更新
对于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);
Run Code Online (Sandbox Code Playgroud)
对于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);
Run Code Online (Sandbox Code Playgroud)
Cha*_*ins 127
USE master
GO
ALTER DATABASE database_name
SET OFFLINE WITH ROLLBACK IMMEDIATE
GO
Run Code Online (Sandbox Code Playgroud)
参考:http://msdn.microsoft.com/en-us/library/bb522682%28v=sql.105%29.aspx
小智 23
您可以通过执行以下操作获取SSMS提供的脚本:
该脚本将如下所示:
USE [master]
GO
ALTER DATABASE [YourDatabaseName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
USE [master]
GO
DROP DATABASE [YourDatabaseName]
GO
Run Code Online (Sandbox Code Playgroud)
小智 7
鲜为人知:GO sql语句可以采用整数表示重复上一个命令的次数.
所以如果你:
ALTER DATABASE [DATABASENAME] SET SINGLE_USER
GO
Run Code Online (Sandbox Code Playgroud)
然后:
USE [DATABASENAME]
GO 2000
Run Code Online (Sandbox Code Playgroud)
这将重复USE命令2000次,强制所有其他连接死锁,并获得单个连接的所有权.(使您的查询窗口可以随意访问.)
| 归档时间: |
|
| 查看次数: |
483799 次 |
| 最近记录: |