在软件项目实施的时候, 数据 导入 一直是项目人员比较头疼的问题。其实,在SQL Server中集成了很多 成批 导入 数据 的 方法 。有些项目实施顾问头疼的问题,在我们 数据 库 管理员眼中,是小菜一碟。现在的重点就是,如何让用户了解这些 方法 ,让 数据 导
在软件项目实施的时候, 数据 导入 一直是项目人员比较头疼的问题。其实,在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 Server的,则需要采用其他的 方法 。
四是采用这条语句的话,在目的表中必须不存在 数据 。否则的话,目的表中的 数据 会被清除。也就是说,这个语句不支持表与表 数据 的合并。在SQL Server中,有一条类似的语句,可以实现这个功能。这条语句就是:Insert Into。他的作用就是把另外一张表中的 数据 插入到当前表中。若用户想要的时表与表 数据 的合并,则可以采用这条语句。两者不能够混淆使用,否则的话,很容易导致 数据 的丢失。
五是以上两条语句都支持兼容的不同类型的 数据 类型。如在原标中,某个字段的 数据 类型是整数型,但是在目的表中这个字段的 数据 类型则是浮点型,只要这个两个 数据 类型本来就兼容的,则在 导入 的时候, 数据 库 是允许的。
第二:利用Excel等中间工具进行控制
虽然第一种 方法 操作起来比较简单,但是其也有一些缺点。如他只支持同一种类型的 数据 库 ;不能够对 数据 进行过多的干预等等。一般情况下,若用户原 数据 准确度比较高,不需要过多的修改就可以直接拿来用的话,则考试大就已采用第一种方式。
但是,若在原 数据 库 中, 数据 的准确度不是很高,又或者,有很多 数据 是报废的。总之,需要对原 数据 库 的 数据 进行整理,才能够使用的情况,考试大不建议先 导入 进去,再进行更改。考试大在遇到这种情况时,喜欢利用Excle作为中间工具。也就是说,先把 数据 中原 数据 库 中导到Excle中。有些 数据 库 ,如Oracle 数据 库 ,他不支持Excle格式。但是,我们可以把它导为CSV格式的文件。这种文件Excle也可以打得开。
然后,再在Excle中,对记录进行修改。由于Excle是一个很强的表格处理软件,所以,其 数据 修改,要比在 数据 库 中直接修改来得方便,来得简单。如可以利用按时间排序等功能,把一些长久不用的记录清楚掉。也可以利用替换等功能,把一些不规范的字符更改掉。这些原来在 数据 库 中比较复杂的任务,在Excle等工具中都可以轻松的完成。
等到表中的内容修改无误后, 数据 库 管理员就可以把Excle表格中的文件直接 导入 到SQL Server 数据 库 中。由于SQL Server与Excel是同一个父母生的,所以,他们之间的兼容性很好。在Sql Server中提供了直接从Excel文件中 导入 数据 的工具。
虽然这要借助中间工具 导入 数据 ,但是,因为其处理起来方便、直观,所以,考试大在大部分时候都是采用这种方式。
第三:使用 数据 转换服务 导入 数据
数据 转换服务是SQL Server 数据 库 中提供的一个非常强大的工具。在SQLServer中, 数据 转换功能有一个图形用户接口,用户可以在图形界面中 导入 数据 ,并对 数据 进行相应的编辑。
另外, 数据 转换服务还支持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等条件限制语句对记录进新过滤。为此,在实际应用中,还是Openrowset这个函数使用的频率比较高。
不过由于其需要用户写复杂的参数,而且,又不能够提供复杂的 数据 验证功能,所以在实际工作中用的并不是很多。在一些小的应用系统中,偶尔还可以见到其的踪影。在一些大的成熟的商业软件中,很少采用这种方式,对 数据 进行 导入 。
有时候,选择多了,用户反而不知道如何下手。考试大平时最喜欢采用的是第二种处理方式。他比较直观,而且,可以对 数据 进行 成批 的更改与整理。但是,其缺陷就是效率比较低,特别是Excle软件对于处理大量记录的时候,速度比较慢。若这种方式行不通的话,则考试大比较倾向于采用 数据 转换的处理方式。这个操作起来虽然比较复杂,但是,其可以提供比较复杂的验证,而且可以在图形化的界面中对 数据 进行修改,同时效率也比较高。
ps:文章摘自http://www.233.com/ncre/three/db/fudao/20090225/084918877.html
查看更多关于四种方法在SQLServer数据库中成批导入数据的详细内容...