MS SQL 2008 - 创建没有数据的数据库副本

时间:2010-10-12 06:45:28

标签: sql-server iis schema

在MS SQL Server 2008 R2中,如何根据旧数据库的模式创建新数据库,但不复制任何数据?我正在使用SQL Server管理工作室。

4 个答案:

答案 0 :(得分:49)

右键单击数据库并选择Tasks - > Generate Scripts

然后,您可以选择所需的所有对象或仅选择某些对象。

您应该查看一些脚本选项:

  • 脚本使用数据库 - 如果要创建具有不同名称的新数据库,则应将其设置为false。
  • 索引&触发器不是默认编写的脚本
  • 登录&对象级权限不是默认脚本
  • 为依赖对象生成脚本 - 默认情况下设置为false,但您可能希望将其更改为true以确保所有对象都已编写脚本。

您可以将它们创建到新的查询窗口或将它们保存到SQL文件。

答案 1 :(得分:8)

摘要

创建此脚本是为了更容易在非常不同的数据库模式之间练习主要网站的数据库迁移。该脚本将执行以下任务:

  1. 使用数据备份最新版本的架构。 (例如:开发数据库)
  2. 删除目标数据库(如果存在)
  3. 将备份还原到目标测试数据库
  4. 删除目标数据库中的所有数据,尽管存在约束和外键
  5. 使用说明

    第1部分

    您可能希望使用备份对话框从SSMS中获取此代码。单击带圆圈的图标以获取特定方案的脚本。

    • 如果这样做,请记住在生成脚本之前在备份选项中设置“覆盖” - 我们不想附加到备份集。

    enter image description here

    第2部分

    在删除目标数据库之前,不要忘记包含USE MASTER命令。如果在单个SSMS会话中第二次运行此脚本,如果不包含此命令,则会出现致命错误。我们在这里使用DROP DATABASE不仅可以删除陈旧的TargetDB,还可以删除其文件(注意,数据库必须是“活动的”才能使其工作)

    第3部分

    您可能希望使用SSMS对话框为您生成此初始恢复脚本,类似于您对备份的第1部分所做的操作。

    第4部分

    不要在这里使用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
    ----------------------------------------------------------------------------------------
    

答案 2 :(得分:4)

有一个很好的脚本向导可以帮助你。您可以使用对象资源管理器中的右键单击数据库来尝试 - >任务 - >生成脚本。您可以从数据库中选择要导出的对象。

答案 3 :(得分:2)

在SQL Server Management Studio中,您可以通过菜单单击对象并选择...

"Script [Object] As" ... "CREATE to"... "New Query Window"

您需要为要创建的每个对象创建脚本。

如果您想完成所有操作,请单击数据库菜单,然后选择

“任务”...“生成脚本”并按照此article按照向导进行操作: