在SQLServer数据库中批量导⼊数据的四种⽅法
在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等脚本语⾔对数据进⾏检验、净化和⼀定的转换,以符合⽬的数据库的需要。
sql语句实现的四种功能如在员⼯信息表中的婚姻状况字段,在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软件对于处理⼤量记录的时候,速度⽐较慢。若这种⽅式⾏不通的话,则笔者⽐较倾向于采⽤数据转换的处理⽅式。这个操作起来虽然⽐较复杂,但是,其可以提供⽐较复杂的验证,⽽且可以在图形化的界⾯中对数据进⾏修改,同时效率也⽐较⾼。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。