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
  • 相关阅读:
    函数与方法(方法前 +
    1362 : 修补木桶 -- 最长的最短边
    149. Max Points on a Line *HARD* 求点集中在一条直线上的最多点数
    148. Sort List -- 时间复杂度O(n log n)
    133. Clone Graph 138. Copy List with Random Pointer 拷贝图和链表
    debug && release
    静态库 && 动态库
    枚举
    获取当前用户所使用的是什么浏览器
    java实现在图片上编辑文本内容
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/8716299.html
Copyright © 2011-2022 走看看