excle 批量导入数据库-mysql批量导入多表数据
在软件项目实施过程中,数据导入一直是令项目人员头疼的问题。 实际上,SQL Server集成了很多批量导入数据的方法。 有些项目实施顾问很头疼,但在我们数据库管理员眼里,小菜一碟。 现在的重点是如何让用户理解这些方法,让数据导入更简单。
第一:使用Select Into语句
如果企业数据库都使用SQL Server数据库,可以使用Select Into语句导入数据。 Select Into语句,其功能是从另一个数据库中查询数据,然后将其添加到用户指定的表中。
使用该语句时,需要注意几个方面。
一是需要先在目标数据库中建立相关表。 如果要将库存系统数据库(SQLServer)中的产品信息表(Product)导入到ERP系统中的产品信息表(M_Product)中。 前期在ERP系统的数据库中已经建立了这张产品信息表。
二是这种方式只拷贝表中的数据,不拷贝表中的索引。 例如,在库存系统数据中的产品信息表中,对产品编号、产品类别等字段建立索引。 使用Select Into语句将数据复制到ERP系统的表中时,只复制数据内容本身,不复制索引等信息。
第三,这个声明的使用有局限性。 通常,这仅适用于 SQL Server 数据库。 但是,不同版本的SQL Server数据库,如2008或2003,仍然兼容。 如果要导入的对象数据库不是SQL Serverexcle 批量导入数据库,则需要使用其他方法。
第四,如果使用这条语句,目的表中必须没有数据。 否则,目标表中的数据将被清除。 也就是说,这条语句不支持表和表数据的合并。 在SQL Server中,有一个类似的语句可以实现这个功能。 这个语句是:Insert Into。 他的作用是将另一个表中的数据插入到当前表中。 如果用户想合并时间表和表数据,可以使用这个语句。 两者不能混用,否则容易导致数据丢失。
第五,以上两个语句都支持不同类型的兼容数据类型。 比如在原来的标准中,某个字段的数据类型是整型,但是在目标表中这个字段的数据类型是浮点型。 只要这两种数据类型本来就兼容,数据库就会被Allowed。
第二种:使用Excel等中间工具进行控制
第一种方法虽然操作起来比较简单,但是也有一些缺点。 比如他只支持同类型的数据库; 他不能对数据进行过多干预,等等。 一般情况下,如果用户的原始数据精度比较高,不需要过多修改就可以直接使用,笔者采用的是第一种方法。
但是,如果在原始数据库中excle 批量导入数据库,数据的准确性不是很高,或者有很多数据被报废了。 总之,如果原始数据库中的数据需要整理一下才能使用,笔者不建议先导入再修改。 笔者遇到这种情况,喜欢用Excel作为中间工具。 也就是说,首先将数据从原始数据库中导入到Excel中。 某些数据库,如 Oracle 数据库,不支持 Excel 格式。 但是,我们可以将其导出为 CSV 文件。 这种文件也可以用Excel打开。
然后,在 Excel 中修改记录。 由于Excel是一款功能强大的表格处理软件,其数据修改比直接在数据库中修改更方便、更简单。 例如,可以使用按时间排序等功能,清除一些长时间没有使用的记录。 您也可以使用替换等功能来更改一些非标准字符。 这些原本在数据库中相对复杂的工作,在Excel等工具中可以轻松完成。
表中内容修改正确后,数据库管理员可以直接将Excel表中的文件导入到SQL Server数据库中。 由于SQL Server和Excel同父异母,所以它们之间的兼容性非常好。 Sql Server中提供了直接从Excel文件中导入数据的工具。
虽然这需要借助中间工具来导入数据,但由于处理起来方便直观,笔者大部分时间都采用这种方式。
第三:使用数据转换服务导入数据
Data Transformation Services 是 SQL Server 数据库中提供的一个非常强大的工具。 在SQL Server中,数据转换功能有一个图形化的用户界面,用户可以在图形化界面中导入数据,并对数据进行相应的编辑。
此外,数据转换服务还支持COM组件的编程接口。 也就是说,开发前台应用时,可以直接调用数据转换服务。 允许用户通过前台应用系统将数据导入数据库系统,而无需对后台数据库系统进行任何操作。 在前台导入数据库系统有一个明显的好处,就是可以提前检查数据的合法性。 例如,可以使用VB等脚本语言对数据进行检查、净化和转换,以满足目标数据库的需要。
例如,员工信息表中的婚姻状况字段,在Oracle数据库系统中,可以用0或1来表示婚姻状况。 0表示未婚,1表示已婚。 在 SQL Server 数据库中,Y 或 N 用于表示婚姻状况。 Y表示已婚,N表示未婚。 导入数据时,如果直接将Oracle数据库表中的数据导入到SQL Server数据库中,由于婚姻状况字段存储的内容类型不同,无法直接导入。 在这种情况下,您可以在导入数据之前使用脚本语言验证数据类型。 如果不符合要求,可以通过脚本语言对数据进行一定程度的转换,0转N,1转Y等。
所以,有时候程序员在开发前端应用的时候,如果要开发数据导入功能,我们推荐使用这个数据转换服务。 不仅有现成的接口,还能对数据进行一定程度的校验和转换。 另外,数据转换服务的数据导入效率非常高。 即使被前台程序调用,在同等条件下其性能也高于其他方法。 而且,随着数据量的增加,数据转换服务的优势会越来越明显。
但是,前台应用程序调用数据转换服务时需要注意。 数据转换服务提供的COM接口比较复杂,因此前台程序调用数据转换服务的代码也比较复杂。 如果加上一些脚本语言,处理起来可能会比较麻烦。 因此,该接口一般只在大型系统上使用。 如果数据不多,否则不需要复杂的校验和转换,用这个接口就是浪费时间,得不偿失。
四:异构数据库之间的导入导出
虽然第二种和第三种方法可以完成异构数据库之间数据的导入导出。 然而,在 SQL Server 中,提供了另一种解决方案。 即在SQL Server数据库中直接连接其他类型的数据库,然后使用Select Into等语句实现数据导入操作。
在SQL Server中,提供了两个函数来帮助我们连接到非SQL Server数据库。 这两个函数分别是Opendatesource和Openrowset。 它们的功能基本相同,但在细节上有所不同。
例如函数Opendatesource只能打开源数据库的表和视图,不能过滤。 如果用户只想将源表中的部分数据导入到SQL Server数据库中的某个表中,则不能直接对源表进行过滤。 过滤操作需要在 SQL Server 数据库中执行。 Openrowset函数可以在打开对方数据库的表或视图时直接使用Where等Conditional Statements来过滤记录。 为此,在实际应用中,Openrowset函数的使用频率更高。
但由于需要用户编写复杂的参数,且不能提供复杂的数据校验功能,因此在实际工作中使用不多。 在一些小的应用系统中,偶尔还是能看到它的身影。 在一些大型成熟的商业软件中,很少采用这种方式导入数据。
有时,有这么多选择,用户不知道从哪里开始。 笔者平时最喜欢用第二种处理方式。 他更直观,而且可以批量更改和组织数据。 但其缺点是效率比较低,尤其是Excel软件处理大量记录时,速度比较慢。 如果这种方法不行,笔者更倾向于使用数据转换处理的方法。 这种操作虽然比较复杂,但是可以提供更复杂的验证,并且可以在图形界面修改数据,效率比较高。