程序已经交给用户使用,后来又修改了数据库结构

clyxy2008 2012-09-18 04:26:06
自己写的程序已经交给用户使用,后来又修改了数据库结构,包括添加删除字段、创建删除表,但是使用先前版本的用户已经在数据库中导入了很多数据,要给用户使用程序的新版本伴随着要更新数据库,请问只能将原来的数据库覆盖吗,这样的话用户原来导入的很多数据将丢失,重新导入将很费时间,本人新手,不清楚有什么解决方案和成熟的方法,能解决这种后期维护时修改数据库结构而产生的问题,难道数据库结构设计完成时候就不能修改吗
...全文
266 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
clyxy2008 2012-09-19
  • 打赏
  • 举报
回复
谢谢大家了,给位各抒己见,我准备买本书再好好研究下,脚本这块的知识太匮乏!
rayyu1989 2012-09-19
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

引用 7 楼 的回复:
写个小程序 自动升级数据库

具体怎么做的能大体说下吗
[/Quote]

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

其他新增 删除 那都是很基本的
nanbaifeiliao 2012-09-19
  • 打赏
  • 举报
回复
做一个升级程序就行了。你将原来的数据转成现在使用的结构就行了。
songjinxi123 2012-09-19
  • 打赏
  • 举报
回复
这很正常,开发的时候不太可能把所有情况都考虑到。
熙风 2012-09-19
  • 打赏
  • 举报
回复
把数据库中数据修复一下
xixihaha_2011_098 2012-09-19
  • 打赏
  • 举报
回复
类似这样的代码

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
GO

if 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
xixihaha_2011_098 2012-09-19
  • 打赏
  • 举报
回复
我们的项目,更新数据库结构,开发人员写一个*.SQL脚本,调用执行就可以了.建议你从这方面考虑,
csdn_风中雪狼 2012-09-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
引用楼主 的回复:
请问只能将原来的数据库覆盖吗,这样的话用户原来导入的很多数据将丢失,重新导入将很费时间,本人新手,不清楚有什么解决方案和成熟的方法,能解决这种后期维护时修改数据库结构而产生的问题,难道数据库结构设计完成时候就不能修改吗


“新手”最喜欢说的就是“做不了、不能改”,找各种理由。

所以产品开发其实首先是看经验。只有那些“骗一单算一单”小软件作坊才会每一次销售都作为一……
[/Quote]
+1
极地_雪狼 2012-09-19
  • 打赏
  • 举报
回复
数据库脚本,就是将你从旧数据库,升级到新数据库,所有表及表结构做的改变,都用SQL语句表现出来。比如增加一个表(包含表结构)create table,修改一个表 alter table ,删除表 drop table。等

升级程序,就是将这些脚本自动执行的过程,顺带可以对你的原有程序进行一些升级性的改变,比如增删改文件及其内容等。
clyxy2008 2012-09-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
写个小程序 自动升级数据库
[/Quote]
具体怎么做的能大体说下吗
clyxy2008 2012-09-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
你自己写一个数据库升级脚本,或者你做一个自动升级程序。
[/Quote]
这两种方法能提供以下大体思路吗
clyxy2008 2012-09-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
这没有什么轻易的方法,就是需要你多懂一点sql而已。
[/Quote]
您指导的是!
rayyu1989 2012-09-19
  • 打赏
  • 举报
回复
写个小程序 自动升级数据库
enaking 2012-09-19
  • 打赏
  • 举报
回复
我曾经也干过这事,就是写一个数据库升级的程序,功能就是去修改数据库的结构,这样你原来的数据都会在,个别特殊的比如你以前是bool现在改成byte,那你就需要代码去改改数据。
lei00529 2012-09-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
引用楼主 的回复:
请问只能将原来的数据库覆盖吗,这样的话用户原来导入的很多数据将丢失,重新导入将很费时间,本人新手,不清楚有什么解决方案和成熟的方法,能解决这种后期维护时修改数据库结构而产生的问题,难道数据库结构设计完成时候就不能修改吗


“新手”最喜欢说的就是“做不了、不能改”,找各种理由。

所以产品开发其实首先是看经验。只有那些“骗一单算一单”小软件作坊才会每一次销售都作为一……
[/Quote]
别把自己搞得像很负责任一样,这不过就是一种探索。觉得走路麻烦,所以有了汽车;觉得用刀杀人麻烦,所以有了机枪和原子弹;因为觉得二进制编码麻烦,所以才会有了这些高级语言。
lei00529 2012-09-19
  • 打赏
  • 举报
回复
其实这个问题不用纠结,任何人都会遇到的。静下心来,慢慢修改,其实东西并不是很多。
我的项目中,我会尽量使用小表(就是每个表字段比较少),而表比较多的这种存储模式。这样的好处在于:如果要增加需求,可以尽量不修改原来的表结构。但是这样做,缺点也是有的,就是在查询的时候,会比较麻烦(可以用视图,结果就是有很多视图)。看各自情况吧。
极地_雪狼 2012-09-18
  • 打赏
  • 举报
回复
你自己写一个数据库升级脚本,或者你做一个自动升级程序。
  • 打赏
  • 举报
回复
这没有什么轻易的方法,就是需要你多懂一点sql而已。
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
请问只能将原来的数据库覆盖吗,这样的话用户原来导入的很多数据将丢失,重新导入将很费时间,本人新手,不清楚有什么解决方案和成熟的方法,能解决这种后期维护时修改数据库结构而产生的问题,难道数据库结构设计完成时候就不能修改吗
[/Quote]

“新手”最喜欢说的就是“做不了、不能改”,找各种理由。

所以产品开发其实首先是看经验。只有那些“骗一单算一单”小软件作坊才会每一次销售都作为一个新的项目去从头定义软件产品设计(然后这种公司在国内很多很多)。

其实这个就是责任心问题。你既然能够把自己开发环境的数据库更新,就能使用ddl语句编写一个升级程序把客户那里的数据库更新。就是你的耐心是否足以独立设计一个程序的问题。(如果一个人他只想简单敷衍用户,那么他宁可花大把时间纠结这个问题,也懒得写一个数据库升级程序)
soul_8750 2012-09-18
  • 打赏
  • 举报
回复
最无奈的是删除列
加载更多回复(1)

110,620

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧