【问题标题】:How to drop a database when it's currently in use?如何删除当前正在使用的数据库?
【发布时间】:2015-11-24 09:39:28
【问题描述】:

注意。我不想将向导中的复选框标记为删除。这个问题严格来说是关于编写行为脚本的。

当我运行以下脚本以重新开始时,我收到数据库 Duck 无法删除的错误,因为它当前正在使用中。

use Master
drop database Duck
drop login WorkerLogin
drop login AdminLogin
go

尽管如此(即使我是系统中当前唯一的用户并且我没有运行其他查询,但这是另一回事),我需要关闭所有现有连接。一种方法是等待它或重新启动管理器。但是,我想编写该行为的脚本,以便我可以告诉顽固的服务器 drop 鸭子下来。 (是的,“错字”的意思。)

我需要在 drop 语句中添加什么?

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    试试下面的代码。

    USE master;
    ALTER DATABASE [Duck] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    DROP DATABASE [Duck] ;
    

    如需深入讨论,请参阅this answer

    【讨论】:

    • 在 bacpac 的还原方案中效果很好。非常适合开发环境,但我不会在生产环境中这样做
    【解决方案2】:

    您必须先终止所有活动连接,然后才能删除数据库。

    ALTER DATABASE YourDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    
    --do you stuff here
    
    ALTER DATABASE YourDatabase SET MULTI_USER
    

    http://wiki.lessthandot.com/index.php/Kill_All_Active_Connections_To_A_Database

    How do you kill all current connections to a SQL Server 2005 database?

    【讨论】:

    • 如果我要删除数据库并完全重新创建它会怎样?我还需要将其设置为多用户吗?或者这是新数据库的默认设置?
    • @KonradViltersten 如果是新创建的数据库,这是默认设置,无需设置,您所要做的就是管理您的数据库用户。
    【解决方案3】:

    【讨论】:

      猜你喜欢
      • 2011-11-20
      • 1970-01-01
      • 2018-08-15
      • 1970-01-01
      • 2021-07-01
      • 1970-01-01
      • 2016-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多