暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据库转换日记---导入到MySQL问题解决

数据中心知识 2022-12-21
269

前言

    近期将ERP后台从MSSQL SERVER过渡到了MYSQL,确实经历了一番波折,转换过程虽然极其痛苦,这里也不卖惨了。将过程记录一下,有人愿意的话共同学习。

    前面的文章已经记录了,数据现在已经到了MySQL的库里了,这个时候才发现自己很傻很天真,上来就被难到了。

具体问题

    小编的ERP代码都是VB.NET写出来的,数据库MSSQL SERVER和VB.NET共同的优点就是,大小写自动识别。小编的编程学习靠的是当当网买书加上度娘的教诲,完全不入流的,所以好的编程习惯就无从谈起。当初学校确实也学过编程,不过那个时候是Turbo C+FoxBase时代,还是以能一张软盘装下一个UCDOS为荣的时代,直到毕业也没学过视窗(Windows)系统。暴露年龄了,不过老叔早就是不在乎年龄的年纪了。

    小编的代码里面,大小写非常随性,数据库表名和字段名也有部分比较随性。这就麻烦了,ERP里面无数条数据库操作命令,要是全部修改的话,得是多大得工作量呀,改得越多可能的错误越多,光调试的工作量也是惊人的,虽说数据表只是测试用的,不会影响到别人,累死自己也不值吧。

     还有,这么大量改源代码,万一MySQL的方案最终失败了,再用回MSSQL SERVER的方案,那又怎么办?

解决方案

    俗话说,办法总比困难多。作为一个自命的程序猿,从来不会放弃解决问题。

     如果数据库的表名和字段名全部都是大写或者全部都是小写,完全不影响整体的数据表结构。如果数据记录全部都是大写或者小写,不管是输入保存还是输出到客户端,也完全不影响其表达的意义,更何况数据记录所表达的意义还基本上都是中文表达的,中文根本不存在大小写之说。MySQL的数据库操作命令及函数,大写小写都是可以的,只有部分参数的地方(比方说代表时间格式的参数)对大小写敏感。

     那么解决方案就出来了,将MySQL数据库里面的所有表名和字段名都改为小写,在代码中加入一条,操作数据库的所有字符,先转成小写再来操作数据库。

具体操作

      现有数据表188个,最少的表字段数只有两个字段,最多的表字段数超过100个。唉,这个数量,说多的话,也不是太吓人,说少的话,也确实有点累人。

       咱程序猿只会复制、粘贴、查找、替换这些简单劳动,那么多敲键盘的活干起来太累了。我想到的办法记录如下:

打开Microsoft SQL Server Management Studio客户端工具,选择数据库,右键点击【任务】---【生成脚本】

在选择脚本选项窗口,除掉【编写创建脚本】这个选择True外,所有其他的都选False,到选择表的时候,选择所有的表,直接下面全选按钮点一下就好了。

浏览并输入一个文件名,将脚本导出成一个文件。等到脚本生成完成,就是一个文本文件了。文本文件里面包含了所有的表的名称和所有的字段名称。

文本文件的操作

研究一下文本文件内容吧,文本文件里面是188个数据表的创捷命令,选择两个显示如下:

/****** Object:  Table [dbo].[Bas_Emp_SheBao]    Script Date: 12/19/2022 17:47:18 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE TABLE [Bas_Emp_SheBao](

[ED] [int] IDENTITY(1,1) NOT NULL,

[EmpID] [int] NULL,

[Project] [nvarchar](50) NULL,

[Month] [smalldatetime] NULL,

[Base] [numeric](18, 2) NULL,

[YangLaoCompany] [numeric](18, 2) NULL,

[YangLaoPerson] [numeric](18, 2) NULL,

[ShiYeCompany] [numeric](18, 2) NULL,

[ShiYePerson] [numeric](18, 2) NULL,

[GongShangCompany] [numeric](18, 2) NULL,

[ShengYuCompany] [numeric](18, 2) NULL,

[YiLiaoCompany] [numeric](18, 2) NULL,

[YiLiaoPerson] [numeric](18, 2) NULL,

[DaBingPerson] [numeric](18, 2) NULL,

[TotalCompany] [numeric](18, 2) NULL,

[TotalPerson] [numeric](18, 2) NULL,

[Total] [numeric](18, 2) NULL

) ON [PRIMARY]

GO

/****** Object:  Table [dbo].[Bas_Emp_KaoHe]    Script Date: 12/19/2022 17:47:18 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE TABLE [Bas_Emp_KaoHe](

[ED] [int] IDENTITY(1,1) NOT NULL,

[EmpID] [int] NULL,

[Month] [smalldatetime] NULL,

[JinE] [numeric](18, 2) NULL,

[ShuoMing] [nvarchar](500) NULL

) ON [PRIMARY]

GO

排列非常有规律,188个表都是这个样子排列的,最上面是注释,最后面是 )ON [PRIMARY] 换行 GO。

而我们需要将所有的188个表的操作命令改成啥样呢,我先列出来就容易了:

/****** Object:  Table [dbo].[Bas_Emp_SheBao]    Script Date: 12/19/2022 17:47:18 ******/

ALTER TABLE Bas_Emp_SheBao RENAME AS bas_emp_shebao;

ALTER TABLE bas_emp_shebao CHANGE ED ed int AUTO_INCREMENT NOT NULL,

CHANGE EmpID empid int NULL,

CHANGE Project project nvarchar(50) NULL,

CHANGE Month month datetime NULL,

CHANGE Base base numeric(18, 2) NULL,

CHANGE YangLaoCompany yanglaocompany numeric(18, 2) NULL,

CHANGE YangLaoPerson yanglaoperson numeric(18, 2) NULL,

CHANGE ShiYeCompany shiyecompany numeric(18, 2) NULL,

CHANGE ShiYePerson shiyeperson numeric(18, 2) NULL,

CHANGE GongShangCompany gongshangcompany numeric(18, 2) NULL,

CHANGE ShengYuCompany shengyucompany numeric(18, 2) NULL,

CHANGE YiLiaoCompany yiliaocompany numeric(18, 2) NULL,

CHANGE YiLiaoPerson yiliaoperson numeric(18, 2) NULL,

CHANGE DaBingPerson dabingperson numeric(18, 2) NULL,

CHANGE TotalCompany totalcompany numeric(18, 2) NULL,

CHANGE TotalPerson totalperson numeric(18, 2) NULL,

CHANGE Total total numeric(18, 2) NULL;

这样一看,好像就成了程序猿容易干的活了,无非就是复制粘贴查找替换的事情了。

下面干活吧:

1、记事本打开后,点【编辑】菜单,点【替换】按钮;选中【区分大小写】

2、查找【SET ANSI_NULLS ON】,替换里面为空,【全部替换】。

3、查找【SET QUOTED_IDENTIFIER ON】,替换里面为空,【全部替换】。

4、查找【GO】,替换里面为空,这个一个个点【替换】,免得出错。

5、查找【[】,替换里面为空,【全部替换】。

6、查找【]】,替换里面为空,【全部替换】。

7、查找【) ON PRIMARY】,替换里面【;】,【全部替换】。

8、查找【CREATE TABLE】,替换里面【ALTER TABLE】,【全部替换】。

9、查找【      】,替换里面【CHANGE 】,【全部替换】。

剩下的手敲一下吧,这么多还不至于敲残掉。


整理好文件后,直接到MySQL里面通过source 文件名执行就可以了。并且还可以在后面的测试中使用。


需要上门解决问题时,请及时联系我们

更多案例文章,请点击!


文章转载自数据中心知识,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论