【问题标题】:MS SQL 2008 - Create a copy of the database without the dataMS SQL 2008 - 创建没有数据的数据库副本
【发布时间】:2011-04-24 03:45:35
【问题描述】:

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

【问题讨论】:

  • 感谢所有回答!都是很好的答案,我得到了它的工作
  • 仅供参考,如果视图、存储过程、函数......被加密(如预期的那样),脚本答案将不起作用:(

标签: sql-server iis schema


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

    总结

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

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

    使用说明

    第 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
    ----------------------------------------------------------------------------------------
    

    【讨论】:

      【解决方案3】:

      有一个不错的脚本向导可以帮助您。您可以通过在对象资源管理器中右键单击数据库 -> 任务 -> 生成脚本来尝试它。您可以从数据库中选择要导出的对象。

      【讨论】:

        【解决方案4】:

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

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

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

        如果您想完成全部工作,请在数据库上单击菜单,然后选择

        "Tasks" ... "Generate Scripts" 并按照这个article

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-15
          • 2010-10-20
          • 1970-01-01
          • 2014-04-25
          • 2012-09-27
          • 1970-01-01
          相关资源
          最近更新 更多