自己写的程序已经交给用户使用,后来又修改了数据库结构,包括添加删除字段、创建删除表,但是使用先前版本的用户已经在数据库中导入了很多数据,要给用户使用程序的新版本伴随着要更新数据库,请问只能将原来的数据库覆盖吗,这样的话用户原来导入的很多数据将丢失,重新导入将很费时间,本人新手,不清楚有什么解决方案和成熟的方法,能解决这种后期维护时修改数据库结构而产生的问题,难道数据库结构设计完成时候就不能修改吗

解决方案 »

  1.   


    “新手”最喜欢说的就是“做不了、不能改”,找各种理由。所以产品开发其实首先是看经验。只有那些“骗一单算一单”小软件作坊才会每一次销售都作为一个新的项目去从头定义软件产品设计(然后这种公司在国内很多很多)。其实这个就是责任心问题。你既然能够把自己开发环境的数据库更新,就能使用ddl语句编写一个升级程序把客户那里的数据库更新。就是你的耐心是否足以独立设计一个程序的问题。(如果一个人他只想简单敷衍用户,那么他宁可花大把时间纠结这个问题,也懒得写一个数据库升级程序)
      

  2.   

    这没有什么轻易的方法,就是需要你多懂一点sql而已。
      

  3.   

    我曾经也干过这事,就是写一个数据库升级的程序,功能就是去修改数据库的结构,这样你原来的数据都会在,个别特殊的比如你以前是bool现在改成byte,那你就需要代码去改改数据。
      

  4.   

    数据库脚本,就是将你从旧数据库,升级到新数据库,所有表及表结构做的改变,都用SQL语句表现出来。比如增加一个表(包含表结构)create table,修改一个表 alter table ,删除表 drop table。等升级程序,就是将这些脚本自动执行的过程,顺带可以对你的原有程序进行一些升级性的改变,比如增删改文件及其内容等。
      

  5.   

    我们的项目,更新数据库结构,开发人员写一个*.SQL脚本,调用执行就可以了.建议你从这方面考虑,
      

  6.   

    类似这样的代码if not exists(select * from syscolumns where id=object_id('gresmanager_goods') and name='goods_allow_discount') 
    ALTER   TABLE gresmanager_goods  ADD goods_allow_discount int NULL DEFAULT (0) 
    GO
    UPDATE gresmanager_goods  SET goods_allow_discount=0  
    GO
    if not exists(select * from syscolumns where id=object_id('gresmanager_table_consume_detail') and name='detail_discount') 
    ALTER   TABLE gresmanager_table_consume_detail ADD detail_discount decimal(18,4) NOT NULL DEFAULT (1)
    GO
    UPDATE gresmanager_table_consume_detail SET detail_discount=1
    GOif not exists(select * from syscolumns where id=object_id('gresmanager_consume_bill_tmp') and name='bill_deposit') 
    ALTER   TABLE gresmanager_consume_bill_tmp ADD bill_deposit decimal(18,4) NULL  DEFAULT (0)
    GO
    UPDATE gresmanager_consume_bill_tmp SET bill_deposit=0
    GO
      

  7.   


    所以人家叫你去了解sql语句嘛
    比如:修改列的格式可以:1.先把原先的列重命名为临时列名,2.新建1个原先列名,格式为新的格式 3.从原先列复制到新列  4.删除旧的列其他新增 删除 那都是很基本的