对应用系统部分数据进行增量更新

问题概述

  我们单位(简称单位A)写的应用系统在另外一个单位(简称单位B)部署了多年,一直到2016年年底我们都在给单位B进行应用系统更新。但是从2017年年初到现在一直没有更新过,最近单位B提出要使用我们开发的新功能,希望我们能够将应用系统最后一次更新到现在的所有增加的功能都更新一下。
  除了功能模块,我们的应用系统中还有模板管理、定制功能,模板的结构如下:
这里写图片描述
  可以定制多种模板,每种模板中包含多种卡片定义以及多种信息字段定义。单位B中使用的模板是我们早期部署应用系统时导过去的模板(就是把单位A当时用的模板数据用数据库脚本导过去),由于2017年一年没有对单位B进行更新,单位B中的应用系统体统管理员根据其单位需要对模板中的卡片样式和信息定义进行了调整,而单位A中的模板数据也发生了改变。单位B要求我们更新功能的同时,把某些模板数据也同时更新过去,便于他们使用。

解决方案

  应用系统的功能更新比较简单,但是更新模板数据比较麻烦。模板相关的数据库表有6张,由于我们的应用系统暂时还没有做模板的导入导出功能,而单位B要求尽快更新(最好2-3天之内就更新),所以只能考虑从数据库中导出脚本进行数据更新,通过自己考虑并咨询同事,先后考虑过以下几类方案:

方案一:数据库表数据覆盖

  最直接的方式就是把单位B中的模板数据直接清掉,然后把单位A现在的模板数据都复制一份过去。如果单位B中的用户没有怎么使用过模板,这种方式可行,但是现在:1)用户使用模板创建了很多数据;2)单位A和单位B中相同模板中的卡片定义和信息定义不太一样了,直接用单位A中的模板替换单位B中的模板会出问题。
  PS:有同事跟我说让我把单位A中的模板数据导出为SQL语句,然后到单位B中执行,这样不重复的数据就会插到数据库表中,重复的数据就会出错。后来我在测试环境的数据库中试了一下,执行SQL语句的时候如果出错了后面的语句就没有执行了,这样会导致插入的数据不全。

方案二:数据库表增量更新1

  后来又有同事建议,可以将单位A中的模板数据导出为SQL语句,然后在单位B中的数据库中建立测试数据库,在测试数据库中执行SQL语句。然后写SQL语句将测试数据库中的数据增量更新到正式数据库对应的表中。这种方式确实可行,但是由于需要单位B中应用系统管理员做的操作太多,怕他在执行的过程中出错,就没有采用这种方式。

方案三:数据库表增量更新2

  最后采用了比较笨的方式来实现的模板数据更新。首先还是将单位A中的模板数据导出为SQL语句,然后在单位A的测试环境中建立测试数据库,执行SQL语句,接着跟单位B的系统管理员要了单位B中应用系统数据库中与模板相关的6张表中的主键列值,在单位A测试环境数据库中手动写SQL语句清除与单位B中模板数据相同的数据,这样测试数据库表中剩下的数据就是要更新的模板数据,然后生成插入数据的数据库脚本发给单位B的应用系统管理员,他只需要执行该脚本即可。
  PS:还是尽快在应用系统中增加模板的导入、导出功能,省得再这么折腾了。

如何从SqlServer数据库中导出插入数据的脚本

步骤1:在SqlServer数据库上点右键,选择任务->生成脚本
从右键中选择生成脚本菜单

步骤2:在弹出的生成和发布窗口(简介)中点击下一步按钮
点击下一步按钮

步骤3:在生成和发布窗口(选择对象)中选中“选择特定数据库对象”,并选择需要导出数据的数据库表,然后点击下一步按钮
选择需要导出数据的数据库表,然后点击下一步按钮

步骤4:在生成和发布窗口(设置脚本编写选项)中设置要导出的脚步文件名称,并点击高级按钮,在高级脚步编写选项窗口中将项“要编写脚本的数据的类型“的值设置为“仅限数据”,点击确定按钮返回,然后点击下一步按钮
在高级脚步编写选项窗口中将项“要编写脚本的数据的类型“的值设置为“仅限数据”,点击确定按钮返回,然后点击下一步按钮

步骤5:在生成和发布窗口(摘要)中点击下一步按钮
点击下一步按钮

步骤6:在生成和发布窗口(保存或发布脚本)中点击完成按钮,脚本导出完毕
点击完成按钮,脚本导出完毕

猜你喜欢

转载自blog.csdn.net/gc_2299/article/details/79039371