【问题标题】:SQL Server 2008 R2 : Drop Database on ConditionSQL Server 2008 R2:按条件删除数据库
【发布时间】:2016-03-19 09:51:45
【问题描述】:

现在,我在这里尝试的是根据任何条件(在 IF 块内)从我的 SQL Server 中删除数据库,例如。如果数据库存在,请删除并重新创建它。

我正在使用以下代码:

IF EXISTS (SELECT 1 FROM sys.databases db with(nolock) WHERE db.name = 'practice')
BEGIN
    USE master
    DROP DATABASE practice
END

这段代码会持续执行几分钟,然后回复一个错误提示

消息 3702,第 16 级,状态 4,第 1 行
无法删除数据库“练习”,因为它当前正在使用中。

然后我再次尝试在我的代码中使用 GO 语句来分隔执行流程,并使用以下代码(注意这也有 create database 语句):

IF EXISTS (SELECT 1 FROM sys.databases db with(nolock) WHERE db.name = 'practice')
BEGIN
    USE master
    GO

    DROP DATABASE practice
    GO

    CREATE DATABASE practice
END

现在它抛出这个错误:

消息 102,第 15 级,状态 1,第 3 行
“master”附近的语法不正确。
消息 3702,第 16 级,状态 4,第 1 行
无法删除数据库“练习”,因为它当前正在使用中。
消息 102,第 15 级,状态 1,第 2 行
'END' 附近的语法不正确

我不知道我是否遗漏了什么,或者有什么需要解决的办法。

另外,如果有的话,我会对更好的替代品感兴趣。

我不知道这是否可行。

问候, 小腿

【问题讨论】:

    标签: sql database sql-server-2008-r2 drop-database


    【解决方案1】:

    如错误消息所示,数据库正在使用中。您可以使用以下脚本强制删除数据库

     if exists(select * from sys.sysdatabases where name ='test')
        begin
        use master;
    
        alter database test
        set single_user with rollback immediate;
    
        drop database test;
    
        end
    

    【讨论】:

      【解决方案2】:

      你也可以做一个

      sp_who2 
      

      查看谁或什么连接到该数据库。然后,您可以使用

      KILL SPID# (i.e. "KILL 54") 
      

      强制关闭该连接。如果您在生产中,但如果您要删除并重新创建数据库,这很危险......

      这比@TheGameiswar 所建议的更具外科性,但非常相似。

      【讨论】:

        【解决方案3】:

        为了练习目的可以使用以下代码:

        EXEC msdb.dbo.sp_delete_database_backuphistory @database_name = N'practice'
        GO
        USE [master]
        GO
        ALTER DATABASE [practice] SET  SINGLE_USER WITH ROLLBACK IMMEDIATE
        GO
        DROP DATABASE [practice]
        GO
        

        现在您可以创建新数据库了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-18
          • 1970-01-01
          相关资源
          最近更新 更多