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