总结
创建此脚本是为了更轻松地在非常不同的数据库架构之间练习主要网站的数据库迁移。该脚本将执行以下任务:
- 使用数据备份架构的最新良好版本。 (例如:开发数据库)
- 删除目标数据库(如果存在)
- 将备份恢复到目标测试数据库
- 删除目标数据库中的所有数据,尽管有约束和外键
使用说明
第 1 部分
您可能希望使用备份对话框从 SSMS 中获取此代码。单击带圆圈的图标以获取特定场景的脚本。
- 如果您这样做,请记住在生成脚本之前在备份选项中设置“覆盖”——我们不想追加到备份集。
第 2 部分
在删除目标数据库之前不要忘记包含USE MASTER 命令。如果您在单个 SSMS 会话中第二次运行此脚本,如果不包含此命令,您将收到致命错误。我们还在这里使用DROP DATABASE,不仅可以删除陈旧的 TargetDB,还可以删除其文件(注意,DB 必须处于“活动状态”才能正常工作)
第三部分
您可能希望使用 SSMS 对话框为您生成此初始恢复脚本,类似于您在第 1 部分中为备份所做的操作。
第四部分
不要在此处使用 Truncate -- 如果您有外键,它将不起作用
源代码(在 SSMS 中运行)
----------------------------------------------------------------------------------------
-- CREATE AN EMPTY COPY OF DATABASE
----------------------------------------------------------------------------------------
/* PART 1: Backup the good database */
BACKUP DATABASE [OriginalDB]
TO DISK = N'd:\backup.bak' WITH NOFORMAT, INIT,
NAME = N'OriginalDB-Full Database Backup', SKIP,
NOREWIND, NOUNLOAD, STATS = 33
GO
/* PART 2: If your destination database already exists, drop it */
USE master -- Make sure to include this -- it allows you to reuse script in same SSMS session
DROP DATABASE [migration]
/* PART 3: Restore the backup to the new location */
RESTORE DATABASE [TargetDB]
FROM DISK = N'D:\backup.bak' WITH FILE = 1,
MOVE N'OriginalDB' TO N'D:\sql data\TargetDB.mdf',
MOVE N'OriginalDB' TO N'C:\SQL Data\TargetDB_1.ldf',
NOUNLOAD, STATS = 33
GO
/* PART 4: Delete all tables' data in the migration testing target */
PRINT N'Clearing [TargetDB]'
USE [TargetDB]
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all" -- disable all constraints
EXEC sp_MSForEachTable "DELETE FROM ?" -- delete data in all tables
exec sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all" -- enable all constraints
----------------------------------------------------------------------------------------
-- BLANK DATABASE COPY CREATED, READY FOR TESTING
----------------------------------------------------------------------------------------