• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
PowerCoder
博客园    首页    新随笔    联系   管理    订阅  订阅

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

 

posted @ 2018-04-04 11:29  PowerCoder  阅读(2469)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3