在我们完成一个项目开发之后,通常我们需要把客户的很多数据导入到数据库中,面对大量的数据导入工作,人工导入肯定是不现实,但是这些又是不得不完成的工作,怎么办呢?我们可以利用数据库管理工具提供的数据导入的功能即可。我们这里以SQL SERVE2008为例。SQLSERVER2008有一个“数据导入导出功能”,当然我们也可以打开数据库之后,在数据库上点击右键,然后选择“任务”,选择“导入数据”,我们就看到弹出淡入数据的对话框:
这里我们主要导入数据的源格式是EXCEL的,在excel文件中,我们通常需要整理成数据表格的形式,excel中的数据不要出现合并的单元格等,必须是和数据库表对应的一条条记录的形式。在上图中我们先选择数据源为excel,然后再选择excel文件的路径,在最下面有一个“首行包含列名称”的复选项,默认是选中的,也就是说在导入数据的时候会把excel的第一行当做数据库表的列名称,根据需要进行选择。然后选择下一步:
上图中我们主要完成选择目的数据库,按照需要选择即可。然后我们直接点击下一步,指导出现下面的画面:
这就会打开excel文件的工作薄,我们选择一个工作簿(sheet),如果我们的excel中的数据列和数据库表中的列不是对应,则需要进行调整,上图中先选中一个“源”,然后再选择这个源对应的“目标”,此时按钮“编辑映射”处于可用状态,我们点击这个按钮,出现下图:
在上图中有“删除目标表中的行”和“向目标表中追加行”的单选选项,他们的意思说的很明白,不解释(哈哈).在虾米那的表格中,我们重点关注的是“源”和“目标”列,源指的是excel中的列,这一列通常是不能选择的,我们主要选择的是“目标”列,在这一列就是完成excel的一列行数据库表中的某一个字段进行对应。按照我们的需要进行对应之后,点击确定,下一步等等,直接到最后一步,中间出现的警告都不用去理会,完成之后,可能出现错误提示,这个提示不是很准确的,有时候虽然出错但是数据仍然导入到数据库了,因此我们查看一下数据库是否导入进去,如果没有导入进去,我们看看错误提示,有可能出现的错误时字段不对应,还有外键关系等等,相应的修改一下即可。
其实上面导入数据个过程尤其是在最后选择“源”和“目标”对应的时候,经常会出现字段的类型不一致的问题,从而导致数据导入不进去,我们可以先把数据直接导入数据库中,生产一个新的数据表,然后在数据库的控制台,利用insert 语句完成数据的导入。
有时候用户的需求发生变化,数据库表的字段增加了,此时数据量有又大的情况下,我们也不会手动输入数据的,直接导入数据的可能改变我们数据库原有的数据,尤其是数据库表存在主键字段(通常都有的),这个字段还是自增的,同时这个主键字段还是其他表的外键字段,那么直接导入就会造成外键字段的值也要进行对应的修改,总的来说就是工作量很大,很复杂。我们怎么能够在不破坏原有的数据情况下,同时又给新增加的字段导入数据呢?
我们先对应的数据库表导出为excel文件。在控制台输入“select * from ####”,然后在输出部分,点击右键选择将“标题和数据一块复制”,然后选择另存为,存储为“*.csv”格式的,再用excel打开。
打开excel之后,给excel表添加相应的字段,保存之后,重新导入到数据库中,但是此时我们导入数据库时目标数据库表的选择不是已经存在的数据库,我们这里不选择,按照默认的设置即可。一路“下一步”就完成导入工作,在数据库中我们将会发现一个自动生成的表,“sheet1”等类似的名称。
然后在控制台利用update语句完成数据的导入或更新:
update A set x1=B.x1,x2=B.x2 from A,B where A.id=B.id
在实际的项目中,我们根据需要进行选择,最重要的工作还是在excel中数据的整理,我们可以利用excel提供的各种快捷方法整理,避免我们手工进行大量重复复杂的工作。
(结束)