我正在使用Microsoft Sql Server Management Studio。 我目前有一个包含数据的现有数据库,我将其称为DatabaseProd 我有第二个数据库,其中包含用于测试的数据,因此数据不完全正确也不是最新的。我将这个数据库称为DatabaseDev。
然而,DatabaseDev现在包含新添加的表和新添加的列等等。
我想将这个新架构从DatabaseDev复制到DatabaseProd,同时保留DatabaseProd的数据。
实施例。 DatabaseProd包含2个表 具有列ID和名称的TableA 具有列ID和jobName的TableB 这些表包含我想保留的数据
DatabaseDev包含3个表 TableA包含列ID,名称和phoneNum 具有列ID和jobName的TableB TableC包含列ID和文档 这些表包含我不需要的数据
将DatabaseDev Schema复制到DatabaseProd,但保留DatabaseProd中的数据 所以复制后的DatabaseProd看起来像这样 TableA包含列ID,名称和phoneNum 具有列ID和jobName的TableB TableC包含列ID和文档 但是这些表格将包含它的原始数据。
这可能吗?
谢谢
答案 0 :(得分:2)
您可以使用Red-Gate SQL Compare,这将允许您比较两个数据库并生成在源数据库上运行的脚本。您必须支付许可费,但您将获得14-day trial period
。
这个工具,以及Data Compare和两个工具,我总是坚持使用新角色,因为它们可以加快开发时间,并最大限度地减少人为错误。
使用SQL比较时,如果需要生成rollback script
,则可以编辑项周围的源和目标,这将创建一个脚本,如果rollout script
失败,它将返回模式的原始状态。但是,执行此操作时非常小心,并且不选择与sql compare同步,而是生成脚本see image。我无法上传图片,但我已将其链接到此处 - 您可以看到两个选项,选择使用SQL比较生成脚本/同步。
答案 1 :(得分:0)
是的,您只需生成一个仅用于架构的数据库脚本,不会向该脚本添加任何数据。
此外,您只需在创建或生成数据库脚本时选择第三个表并将该脚本运行到生产服务器数据库,它将创建一个新表(在您的情况下为表3),而不包含任何数据。
有关如何创建数据库脚本的更多信息,请访问以下链接:
答案 2 :(得分:0)
您需要一个ALTER TABLE语句
ALTER TABLE tableA ADD PhoneNum Varchar(10) --Insert variable of choice here
看起来没有对TableB进行任何更改
添加TableC
CREATE TABLE TableC (ColumnID int, Document Varvhar(50))
您是否需要复制约束,索引或触发器?