zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Linux shell(3)
    Linux shell 编写(2)
    Linux shell 编写(1)
    团队冲刺(一)
    峦码团队任务表
    电梯演讲&界面展示说明
    第一次小组会议——NABCD讨论
    开发项目&团队介绍
    Linux中查看各文件夹大小命令:du -h --max-depth=1
    shell脚本[] [[]] -n -z 的含义解析
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/8716299.html
Copyright © 2011-2022 走看看