用其他数据库的副本替换数据库

Replace Database WIth Copy Of Other Database

作为我们测试过程的一部分,我正在尝试自动执行以下操作:

  1. 删除数据库 B。
  2. 创建数据库 A 的备份
  3. 从数据库 A 的备份重新创建数据库 B

我曾希望这样的事情会起作用RESTORE DATABASE DatabaseB FROM DISK = 'c:\temp\DatabaseA.bak' WITH REPLACE,但结果是想要覆盖 DatabaseA 的现有 ldf 和 mdf 文件。

A​​zure 的 SQL 服务器似乎具有此功能:CREATE DATABASE DatabaseB AS COPY OF DatabaseA,但我们的本地服务器不支持此功能。

有没有简单(干净)的方法来做到这一点?

根据@Larnu 的反馈和更多研究,我得出以下结论:

USE Master

--Drop the existing testing database
IF DB_ID('DatabaseB') IS NOT NULL
BEGIN
    ALTER DATABASE DatabaseB 
    SET SINGLE_USER 
    WITH ROLLBACK IMMEDIATE

    DROP DATABASE [DatabaseB]
END


--create a backup of the database we want
BACKUP DATABASE DatabaseA TO DISK = 'c:\temp\DatabaseA.bak'
WITH CHECKSUM, COPY_ONLY, FORMAT, INIT, STATS = 10;

-- List the files (for dev purposes only, any file listed here needs a MOVE statement below, you may have user and memory files as well as db and logs)
--RESTORE FILELISTONLY FROM DISK = 'c:\temp\Database.bak'

-- restore the backup top
RESTORE
DATABASE [DatabaseB]  
FROM DISK = 'c:\temp\DatabaseA.bak'
WITH CHECKSUM,
MOVE 'DatabaseA' TO 'c:\temp\DatabaseB.mdf',
MOVE 'DatabaseA_log' TO 'c:\temp\DatabaseB.ldf',
RECOVERY, REPLACE, STATS = 10;