【问题标题】:Dropping and recreating databases in Microsoft SQL Server在 Microsoft SQL Server 中删除和重新创建数据库
【发布时间】:2012-09-11 06:52:43
【问题描述】:

我正在试验和学习 Microsoft SQL Server 2008 R2 SP1。 我有一个数据库,在那里我做了很多实验。现在我想删除并重新创建它。 所以我从数据库中提取创建脚本,删除它,然后使用脚本重新创建它。 令我惊讶的是,所有的桌子、钥匙等都还在。 如何删除数据库,以便从头开始重建数据库?

【问题讨论】:

    标签: sql-server sql-server-2008


    【解决方案1】:
    USE master
    IF EXISTS(select * from sys.databases where name='yourDBname')
    DROP DATABASE yourDBname
    
    CREATE DATABASE yourDBname
    

    【讨论】:

    • 你说得对,我的问题很愚蠢。事实上,我继续看到的表实际上是在 master 数据库中创建的,而不是在我的数据库中。
    • 这对我帮助很大!
    【解决方案2】:

    +1 给 AnandPhadke 的代码

    此代码将关闭与数据库的所有活动连接,然后将其删除

    WHILE EXISTS(select NULL from sys.databases where name='YourDBName')
    BEGIN
        DECLARE @SQL varchar(max)
        SELECT @SQL = COALESCE(@SQL,'') + 'Kill ' + Convert(varchar, SPId) + ';'
        FROM MASTER..SysProcesses
        WHERE DBId = DB_ID(N'YourDBName') AND SPId <> @@SPId
        EXEC(@SQL)
        DROP DATABASE [YourDBName]
    END
    GO
    
    CREATE DATABASE YourDBName
    GO
    

    【讨论】:

      【解决方案3】:

      要求多次输入 DBName 很容易出错,在某些时候执行时会出现不一致的条目和意想不到的后果。

      我更喜欢 AnandPhadke 或 Pierre 提供的不同支持的答案。

      DECLARE @DBName varchar(50) = 'YourDatabaseName'
      USE master
      IF EXISTS(select * from sys.databases where name= @DBName)
      EXEC('DROP DATABASE ' + @DBName)
      
      EXEC('CREATE DATABASE ' + @DBName)
      

      DECLARE @DBName varchar(50) = 'YourDatabaseName'
      WHILE EXISTS(select NULL from sys.databases where name = @DBName )
      BEGIN
          DECLARE @SQL varchar(max)
          SELECT @SQL = COALESCE(@SQL,'') + 'Kill ' + Convert(varchar, SPId) + ';' FROM MASTER..SysProcesses WHERE DBId = DB_ID(@DBName) AND SPId <> @@SPId
          EXEC(@SQL)
          EXEC('DROP DATABASE ' + @DBName)
      END
      GO
      

      【讨论】:

        【解决方案4】:

        SQL Server 2016(及更高版本)支持一行和原子(?)语法DROP DATABASE IF EXISTS database_name

        参考号:https://msdn.microsoft.com/en-us/library/ms178613.aspx

        【讨论】:

          【解决方案5】:

          我从数据库中提取创建脚本

          这将为数据库中的所有内容(表、键等)提取创建脚本。如果你只是想创建一个空数据库,只需运行CREATE DATABASE &lt;dbname&gt;

          【讨论】:

            【解决方案6】:

            这对我最有效:

            if exists (select name from sys.databases where name='YourDBName')
            alter database YourDBName set single_user with rollback immediate
            go
            if exists (select name from sys.databases where name='YourDBName')
            drop database YourDBName
            

            【讨论】:

            • 我相信你误判了这个答案,@KhanImranAli。这一个试图回答,虽然很糟糕。这应该通过投票来调节,而不是通过标记和负面评论。
            • 请说明您的代码的作用以及它如何回答问题。如果您得到一个代码 sn-p 作为答案,您可能不知道如何处理它。答案应为 OP 和未来的访客提供指导。指出您的代码背后的想法是什么,对理解问题以及应用或修改您的解决方案有很大帮助。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-08-12
            • 2021-10-11
            • 1970-01-01
            相关资源
            最近更新 更多