【问题标题】:Copy database schema to an existing database将数据库模式复制到现有数据库
【发布时间】:2013-09-23 07:06:32
【问题描述】:

我正在使用 Microsoft Sql Server Management Studio。 我目前有一个包含数据的现有数据库,我将其称为 DatabaseProd 而且我有第二个数据库,其中包含用于测试的数据,因此数据并不完全正确,也不是最新的。我将把这个数据库称为 DatabaseDev。

但是 DatabaseDev 现在包含新添加的表和新添加的列等。

我想将这个新模式从 DatabaseDev 复制到 DatabaseProd,同时保留 DatabaseProd 的数据。

例如。 DatabaseProd 包含 2 个表 具有列 ID 和名称的表 A 具有列 ID 和作业名称的表 B 这些表包含我想保留的数据

DatabaseDev 包含 3 个表 具有列 ID、名称和电话号码的表 A 具有列 ID 和作业名称的表 B 带有列 ID 和文档的 TableC 这些表包含我不需要的数据

将 DatabaseDev Schema 复制到 DatabaseProd 但保留来自 DatabaseProd 的数据 所以复制后的 DatabaseProd 看起来像这样 具有列 ID、名称和电话号码的表 A 具有列 ID 和作业名称的表 B 带有列 ID 和文档的 TableC 但表格将包含它的原始数据。

这可能吗?

谢谢

【问题讨论】:

  • 我建议使用类似 Visual Studio 的数据库比较工具。
  • 但是我该如何制作副本呢?
  • 它不会复制,它会生成一个脚本。该工具能够比较数据库,编写更改脚本,然后您可以在执行之前根据需要修改该脚本。

标签: sql sql-server database


【解决方案1】:

是的,您可以只生成一个仅用于模式的数据库脚本,不会将任何数据添加到该脚本中。

此外,您只需在创建或生成数据库脚本时选择第三个表并将该脚本运行到您的生产服务器数据库,它将创建一个没有任何数据的新表(在您的情况下为表 3)。

有关如何创建数据库脚本的更多信息,请点击以下链接:

http://blog.sqlauthority.com/2011/05/07/sql-server-2008-2008-r2-create-script-to-copy-database-schema-and-all-the-objects-data-schema-stored-procedure-functions-triggers-tables-views-constraints-and-all-other-database-objects/

【讨论】:

  • 如果我理解正确,这只会在我的生产服务器上创建一个带有 DatabaseDEV 架构的新数据库? DatabaseProd 中的数据将不在其中。我想在其中包含 DatabaseProd 数据。
【解决方案2】:

你需要一个 ALTER TABLE 语句

ALTER TABLE tableA ADD PhoneNum Varchar(10) --Insert variable of choice here

TableB 看起来没有变化

添加表格C

CREATE TABLE TableC (ColumnID int, Document Varvhar(50))

您是否需要复制约束、索引或触发器?

【讨论】:

    【解决方案3】:

    您可以使用Red-Gate SQL Compare,这将允许您比较两个数据库并生成一个脚本以在源数据库上运行。你必须为许可证付费,但你会得到一个14-day trial period

    这个工具,连同 Data Compare 和两个我一直坚持的新角色工具,因为它们加快了开发时间,并最大限度地减少了人为错误。

    另外,使用 SQL 比较时的一个很好的提示 - 如果您需要生成一个rollback script,那么您可以编辑项目(在创建您的rollout script 之后),切换源和目标周围,​​这将创建一个脚本,如果rollout script 失败,它将模式返回到其原始状态。但是,在执行此操作时要非常小心,并且不要选择与 sql compare 同步,而是生成一个脚本 see image。我无法上传图片,但我已在此处链接到一张图片 - 您可以看到两个选项来选择使用 SQL 比较生成脚本/同步。

    【讨论】:

    • 这个工具看起来不错,但是它也传输数据吗?因为它似乎正在这样做。我是否选择了一些不好的选项?
    • 您也可以使用 Red-Gate SQL 数据比较,这将根据关键字段进行比较,并创建插入、删除或更新的脚本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 2010-09-08
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多