使用 SQL Server 2008 从 .bak 中分离并恢复具有相同名称的数据库

Detach & Restore Database with same Name from .bak Using SQL Server 2008

我有一个 ASP.NET 网络表单,其中包含三个按钮 BackupResetRestore数据库。

当我单击 BackUp 时,它开始备份数据库并创建一个 .bak 文件。 重置 按钮截断所有表格。但是 Restore 数据库将充当撤消操作,即当我单击 Restore 时,它将再次从 .bak 文件恢复相同的数据库。

目前,当我点击恢复时,它说数据库正在使用中,我无法恢复它。为此,我想先分离数据库,然后从 .bak 文件中以相同的名称恢复它。

我的想法是连接到 master 数据库,然后从那里分离我的数据库,然后从 .bak 文件恢复它。但我不确定,这是个好主意还是会奏效。

我使用以下方法恢复数据库,但我想用相同的名称恢复它。

    SQLcon.ConnectionString = "Data Source=" + servername + ";Initial Catalog=master;pwd=" + pwd + ";user=" + user + ";"
    SQLcon.Open()
    Try
       SQLCmd = New SqlCommand("Restore database MyDatabaseNew from disk='E:\MyDatabase.bak' WITH MOVE 'MyDatabase_Data' TO 'D:\DATA\MyDatabase .mdf', MOVE 'MyDatabase_Log' TO 'D:\DATA\MyDatabaseLog.ldf',REPLACE,STATS=10", SQLcon)
        SQLCmd.CommandTimeout = CInt(CommandTimeout)
        SQLCmd.ExecuteNonQuery()
        Response.Write("restore database successfully")

我将如何实现这一目标?任何建议将不胜感激。

我在 master 数据库中执行了以下操作并且成功了。我仍然不确定这是否是一个好方法。

SET @str = 'ALTER DATABASE [' + @DBName + '] SET SINGLE_USER WITH ROLLBACK IMMEDIATE EXEC master.dbo.sp_detach_db @dbname = ''' + @DBName + ''''    
exec (@Str)     
Print 'Alter Done'    

SET @StrRes = 'Restore database ' + @DBName +' from disk = ''' + @BkPath +''' WITH   MOVE ''MyDB_Data'' TO '''+ @ResPathData +''' ,  MOVE ''MyDB_Log'' TO '''+ @ResPathLog +''' ,  REPLACE,STATS=10 '  

exec (@StrRes)

Print 'Restore Done'