Sql server 使用drop database 语句,无法删除正在使用的数据库的解决办法
使用DROP DATABASE 删除数据库 显示“无法删除数据库 ,因为该数据库当前正在使用。
解决办法:在删除某一个数据库(下例中的“DB1”数据库)前,强制kill掉该数据库上的所有数据库连接。
无法删除数据库 "#Test",因为该数据库当前正在使用 --查询分析器中执行下面的语句就行了. use master go declare @dbname sysname set @dbname='DB1' --这个是要删除的数据库库名 declare @s nvarchar(1000) declare tb cursor local for select s='kill '+cast(spid as varchar) from master..sysprocesses where dbid=db_id(@dbname) open tb fetch next from tb into @s while @@fetch_status=0 begin exec(@s) fetch next from tb into @s end close tb deallocate tb exec('drop database ['+@dbname+']')
如果不想用游标,也可以用循环,如下所示:
CREATE PROCEDURE [dbo].[SP_DropDatabase] @databaseName nvarchar(100) AS BEGIN DECLARE @spid INT=NULL SELECT @SPID=spid FROM master..sysprocesses WHERE dbid=DB_ID(@databaseName) WHILE @spid IS NOT NULL BEGIN DECLARE @killScript NVARCHAR(200)=N'KILL '+CAST(@spid AS NVARCHAR(50)) EXEC sp_executesql @killScript SET @spid=NULL SELECT @SPID=spid FROM master..sysprocesses WHERE dbid=DB_ID(@databaseName) END DELETE FROM [dbo].[T_ClientScriptDetails] WHERE ClientName=@databaseName DELETE FROM [dbo].[T_ClientScripts] WHERE ClientName=@databaseName DECLARE @dropScript NVARCHAR(200)=N'DROP DATABASE ['+@databaseName+N']' EXEC sp_executesql @dropScript END