怎么批量修改数据库的表明和字段

时间:2021-09-19 14:56:18
最近做个项目,甲方要求数据库表明必须为英文或者字母,字段也是一样,包括存储过程,函数触发器等,除注释外不能包含中文,这个是给外国佬做的项目,现在的问题是我们的数据库大部分是中文,兄弟们有没有什么办法啊,还有程序里面的也是一样,数据库该了,代码里面也要修改啊,太他妈的变态了,简直疯了,项目有1000多个form,相当于是把所有代码,和数据库重新翻写一遍,要人命啊,咋个整哦,高分求解,可以真金白银的给人民币

25 个解决方案

#1


  楼主问这个问题有点让人纳闷啊,我们做数据库这么长时间,还从来没有用汉字来定义过表格、字段、存储过程或函数,不知道你“现在的问题是我们的数据库大部分是中文”是什么意思?
  至于软件,如果采用.Net开发,只要在Language中选择[中文(*)]设置好中文,选择[英文]设置好英文,打包后软件安装在英文操作系统,就显示英文了。

#2


批量修改 数据库中和代码中 的表名和字段名?
必须对应地一致修改

#3


数据库必须手工修改,而且改完后要记录下来,存储过程和程序里都有用到。

很同情你,但只能去做。 怎么批量修改数据库的表明和字段

#4


不会是表字段也用中文吧?要是麻烦就大了。

#5


改吧,只能这样了,一般来说表名字段名都不用中文的,否则如果是数据库的英文版本会引发错误。

#6


表示同情,但只能手工改了,程序里的还可以用查找替换。。。数据库就。。。阿门!

#7


同      情。

#8


我有一个办法去处理:
把数据库、表、字段名、存储过程、和代码中的中文,通过Utf8Encode函数,
得到一个数字编码值,然后加上一个通用的前缀T或F,批量修改处理。
同时结合svn工具来比较版本,检查是否把常量值中文也修改了,改回去。

这样比一个个去修改表和代码,效率提高几十倍。
QQ:25594165

#9



  考虑到甲方要求是英文,不要数字,那么需要增加一项工作,
就是表名和字段名,提取出所有的中文字,然后去掉重复。
  比如得到100个汉字,然后把这些汉字建立一个汉字和英文的对照表,
  根据对照表去替换汉字。这样既替换了,又不会出现重复。

#10


趁这次,彻底的改了吧,这年头做程序的那个不认识1、2千个英语单词啊,谁还愿意在SQL里打一大堆汉字?再说很多数据库不支持汉字表名、字段的。

#11


我见过一个比较出名的酒店管理软件,数据库里就是用中文命名字段的。

#12


我的软件是在中文操作系统下运行,自然表和字段均用中文。如果使用英文系统,当然要用英文表和字段。慢慢改吧。

#13


自己写一个小工具,遍历所有的文件,按照对中英文对照表,进行修改
不建议字段名用中文

#14


数据库方面,可以写脚本改,今年我们公司就把使用了10多年的繁体ERP系统改为简体,也是很多都有改名的,Form方面你也可以批量替换

#15


这个吗本就用英文写的现在改的话也不晚。
虽然同情但是还得该。
用手工改彻底改过来。

#16


呵呵,谢谢大家的回复,这几天一直在跟甲方进行艰苦的谈判,博弈啊,累死了,对方坚决不松口啊,我们的数据库表名和字段大部分都是中文,存储过程和函数的名称也大部分是中文,咋是中国人,中文方便啊,一看就懂,现在要全部改过来,除了数据库要改外,还有前后台的代码。服务程序的一大堆delphi的code啊,而且我们现在还是用的bde,不能再64位机上运行,甲方基本都是win7 64位的,我们还要修改为ado才行,1个多G的源代码啊,而且要编译64位的,我们打算用delphi xe4,但是要从可怜的delphi7转过来,真的是没有多大把握啊,有没有什么办法写个程序,遍历所有源代码,把所有query和代码中的表明先修改过来,我现在是准备建一个表,用来存放中文表和英文表的映射关系,然后逐一对照替换,希望大家多个点意见啊,如果有整套的解决方案,经过我们论证确实可行的话,可以人民币交易的

#17


遍历query和代码应该是比较好实现的,映射表做好了,替换起来会比较快,就在xe中跑起来要花不少时间

#18


楼上的,我想写个程序来遍历query,改怎么做呢

#19


问题是delphi的代码和form是分开的啊,我在程序中怎么打开.pas和form里面的query呢

#20


该回复于2013-08-13 17:02:25被管理员删除

#21


前几天把库里面的表,视图,函数,存储过程,触发器全部做了个对照表,视图,存储过程等的文本又写入了一个文本表中,然后用对象表中的英文名称来做替换,现在的问题是,我想把视图,函数,存储过程等里面的中文表名替换掉,写了个存储过程,执行了半天,替换不了
ALTER procedure [dbo].[置换文本存储过程]
as 
begin
    declare @texttypetable table(id int identity,对象类型 varchar(30))
declare @minviewid int,@objid int,@mintextid int,@minallobjid int,@textstr nvarchar(4000),
@chsname varchar(50),@engname varchar(50),@allnextobjid int,@objtype varchar(50)
declare @viewtable table(id int,中文名称 varchar(50),英文名称 varchar(50),对象类型 varchar(50),原对象id int)
declare @commentstable table(id int,文本 nvarchar(4000))
declare @allobjtable table(id int,中文名称 varchar(50),英文名称 varchar(50),对象类型 varchar(50),原对象id int)
declare @changetable table(id int,中文名称 varchar(50),英文名称 varchar(50),替换文本 nvarchar(4000))
declare @inum int,@typename varchar(30)
--置换文本中的表名
insert into @commentstable select id,text from 对象文本表 order by id
insert into @allobjtable select * from 中英文对照表 order by id
select @minallobjid=MIN(id) from @allobjtable
while @minallobjid is not null 
begin
select @chsname=rtrim(ltrim(中文名称)),@engname=rtrim(ltrim(英文名称)) 
from @allobjtable where id=@minallobjid

set @mintextid=null
select @mintextid=MIN(id) from @commentstable
while @mintextid is not null 
begin
select @textstr=文本 from @commentstable where id=@mintextid
set @textstr=REPLACE(@textstr,@chsname,@engname)
update 对象文本表 set text=@textstr where id=@mintextid
select @allnextobjid=@mintextid,@mintextid=null
select @mintextid=MIN(id) from @commentstable where id>@allnextobjid
end
delete @allobjtable where id=@minallobjid
set @minallobjid=null
select @minallobjid=MIN(id) from @allobjtable
end    
end

思路就是用对照表中的英文名称去遍历文本表中的文本,把每个文本取出来替换一下,然后更新回去,结果是没有效果,各位有什么好办法吗?
救急啊!!!

#22


实际上就是一个双重循环而已,

#23


窗体的代码可以整体替换

#24


现在dfm和pas文件都可以替换了,数据库也已经替换了,最后的问题是字段怎么替换,在数据库和程序代码中

#25


可以考虑把原来数据库生成sql语句,所有表,视图和存储过程。再修改成中文。可能会比较快。另外code中只有改啦没法的。

#1


  楼主问这个问题有点让人纳闷啊,我们做数据库这么长时间,还从来没有用汉字来定义过表格、字段、存储过程或函数,不知道你“现在的问题是我们的数据库大部分是中文”是什么意思?
  至于软件,如果采用.Net开发,只要在Language中选择[中文(*)]设置好中文,选择[英文]设置好英文,打包后软件安装在英文操作系统,就显示英文了。

#2


批量修改 数据库中和代码中 的表名和字段名?
必须对应地一致修改

#3


数据库必须手工修改,而且改完后要记录下来,存储过程和程序里都有用到。

很同情你,但只能去做。 怎么批量修改数据库的表明和字段

#4


不会是表字段也用中文吧?要是麻烦就大了。

#5


改吧,只能这样了,一般来说表名字段名都不用中文的,否则如果是数据库的英文版本会引发错误。

#6


表示同情,但只能手工改了,程序里的还可以用查找替换。。。数据库就。。。阿门!

#7


同      情。

#8


我有一个办法去处理:
把数据库、表、字段名、存储过程、和代码中的中文,通过Utf8Encode函数,
得到一个数字编码值,然后加上一个通用的前缀T或F,批量修改处理。
同时结合svn工具来比较版本,检查是否把常量值中文也修改了,改回去。

这样比一个个去修改表和代码,效率提高几十倍。
QQ:25594165

#9



  考虑到甲方要求是英文,不要数字,那么需要增加一项工作,
就是表名和字段名,提取出所有的中文字,然后去掉重复。
  比如得到100个汉字,然后把这些汉字建立一个汉字和英文的对照表,
  根据对照表去替换汉字。这样既替换了,又不会出现重复。

#10


趁这次,彻底的改了吧,这年头做程序的那个不认识1、2千个英语单词啊,谁还愿意在SQL里打一大堆汉字?再说很多数据库不支持汉字表名、字段的。

#11


我见过一个比较出名的酒店管理软件,数据库里就是用中文命名字段的。

#12


我的软件是在中文操作系统下运行,自然表和字段均用中文。如果使用英文系统,当然要用英文表和字段。慢慢改吧。

#13


自己写一个小工具,遍历所有的文件,按照对中英文对照表,进行修改
不建议字段名用中文

#14


数据库方面,可以写脚本改,今年我们公司就把使用了10多年的繁体ERP系统改为简体,也是很多都有改名的,Form方面你也可以批量替换

#15


这个吗本就用英文写的现在改的话也不晚。
虽然同情但是还得该。
用手工改彻底改过来。

#16


呵呵,谢谢大家的回复,这几天一直在跟甲方进行艰苦的谈判,博弈啊,累死了,对方坚决不松口啊,我们的数据库表名和字段大部分都是中文,存储过程和函数的名称也大部分是中文,咋是中国人,中文方便啊,一看就懂,现在要全部改过来,除了数据库要改外,还有前后台的代码。服务程序的一大堆delphi的code啊,而且我们现在还是用的bde,不能再64位机上运行,甲方基本都是win7 64位的,我们还要修改为ado才行,1个多G的源代码啊,而且要编译64位的,我们打算用delphi xe4,但是要从可怜的delphi7转过来,真的是没有多大把握啊,有没有什么办法写个程序,遍历所有源代码,把所有query和代码中的表明先修改过来,我现在是准备建一个表,用来存放中文表和英文表的映射关系,然后逐一对照替换,希望大家多个点意见啊,如果有整套的解决方案,经过我们论证确实可行的话,可以人民币交易的

#17


遍历query和代码应该是比较好实现的,映射表做好了,替换起来会比较快,就在xe中跑起来要花不少时间

#18


楼上的,我想写个程序来遍历query,改怎么做呢

#19


问题是delphi的代码和form是分开的啊,我在程序中怎么打开.pas和form里面的query呢

#20


该回复于2013-08-13 17:02:25被管理员删除

#21


前几天把库里面的表,视图,函数,存储过程,触发器全部做了个对照表,视图,存储过程等的文本又写入了一个文本表中,然后用对象表中的英文名称来做替换,现在的问题是,我想把视图,函数,存储过程等里面的中文表名替换掉,写了个存储过程,执行了半天,替换不了
ALTER procedure [dbo].[置换文本存储过程]
as 
begin
    declare @texttypetable table(id int identity,对象类型 varchar(30))
declare @minviewid int,@objid int,@mintextid int,@minallobjid int,@textstr nvarchar(4000),
@chsname varchar(50),@engname varchar(50),@allnextobjid int,@objtype varchar(50)
declare @viewtable table(id int,中文名称 varchar(50),英文名称 varchar(50),对象类型 varchar(50),原对象id int)
declare @commentstable table(id int,文本 nvarchar(4000))
declare @allobjtable table(id int,中文名称 varchar(50),英文名称 varchar(50),对象类型 varchar(50),原对象id int)
declare @changetable table(id int,中文名称 varchar(50),英文名称 varchar(50),替换文本 nvarchar(4000))
declare @inum int,@typename varchar(30)
--置换文本中的表名
insert into @commentstable select id,text from 对象文本表 order by id
insert into @allobjtable select * from 中英文对照表 order by id
select @minallobjid=MIN(id) from @allobjtable
while @minallobjid is not null 
begin
select @chsname=rtrim(ltrim(中文名称)),@engname=rtrim(ltrim(英文名称)) 
from @allobjtable where id=@minallobjid

set @mintextid=null
select @mintextid=MIN(id) from @commentstable
while @mintextid is not null 
begin
select @textstr=文本 from @commentstable where id=@mintextid
set @textstr=REPLACE(@textstr,@chsname,@engname)
update 对象文本表 set text=@textstr where id=@mintextid
select @allnextobjid=@mintextid,@mintextid=null
select @mintextid=MIN(id) from @commentstable where id>@allnextobjid
end
delete @allobjtable where id=@minallobjid
set @minallobjid=null
select @minallobjid=MIN(id) from @allobjtable
end    
end

思路就是用对照表中的英文名称去遍历文本表中的文本,把每个文本取出来替换一下,然后更新回去,结果是没有效果,各位有什么好办法吗?
救急啊!!!

#22


实际上就是一个双重循环而已,

#23


窗体的代码可以整体替换

#24


现在dfm和pas文件都可以替换了,数据库也已经替换了,最后的问题是字段怎么替换,在数据库和程序代码中

#25


可以考虑把原来数据库生成sql语句,所有表,视图和存储过程。再修改成中文。可能会比较快。另外code中只有改啦没法的。