在SQL Server数据库中批量导入数据

第一:使用Select Into语句

若企业数据库都采用的是SQL Server数据库的话,则可以利用Select Into语句来实现数据的导入。Select Into语句,他的作用就是把数据从另外一个数据库中查询出来,然后加入到某个用户指定的表中。

在使用这条语句的时候,需要注意几个方面的内容。

假设有一个表table1,字段为f1(int)、f2(varchar(50))。

 代码如下 复制代码

SELECT*INTO table2 FROM table1  这条SQL语的在建立table2表后,将table1的数据全部插入到table1中的,还可以将*改为f1或f2以便向适当的字段中插入数据。
  SELECT INTO不仅可以在同一个数据中建立表,也可以在不同的SQL Server数据库中建立表。

USE db1
SELECT*INTO db2.dbo.table2 FROM table1

第二:利用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这个函数使用的频率比较高。

不过由于其需要用户写复杂的参数,而且,又不能够提供复杂的数据验证功能,所以在实际工作中用的并不是很多。在一些小的应用系统中,偶尔还可以见到其的踪影。在一些大的成熟的商业软件中,很少采用这种方式,对数据进行导入。

时间: 2024-10-28 22:52:11

在SQL Server数据库中批量导入数据的相关文章

SQL Server数据库中批量导入数据的2种方法_MsSql

在软件项目实施的时候,数据导入一直是项目人员比较头疼的问题.其实,在SQL Server中集成了很多成批导入数据的方法.有些项目实施顾问头疼的问题,在我们数据库管理员眼中,是小菜一碟.现在的重点就是,如何让用户了解这些方法,让数据导入变得轻松一些.相信以下方法大家都用过了,温故而知新哈,如果有更好的方法希望大家都提出来~ 一.使用Select Into语句 若企业数据库都采用的是SQL Server数据库的话,则可以利用Select Into语句来实现数据的导入.Select Into语句,他的

SQL Server数据库中批量导入数据的四种方法总结_MsSql

在软件项目实施的时候,数据导入一直是项目人员比较头疼的问题.其实,在SQL Server中集成了很多成批导入数据的方法.有些项目实施顾问头疼的问题,在我们数据库管理员眼中,是小菜一碟.现在的重点就是,如何让用户了解这些方法,让数据导入变得轻松一些. 第一:使用Select Into语句 若企业数据库都采用的是SQL Server数据库的话,则可以利用Select Into语句来实现数据的导入.Select Into语句,他的作用就是把数据从另外一个数据库中查询出来,然后加入到某个用户指定的表中.

SQL Server数据库中批量导入数据的2种方法

在软件项目实施的时候,数据导入一直是项目人员比较头疼的问题.其实,在SQL Server中集成了很多成批导入数据的方法.有些项目实施顾问头疼的问题,在我们数据库管理员眼中,是小菜一碟.现在的重点就是,如何让用户了解这些方法,让数据导入变得轻松一些.相信以下方法大家都用过了,温故而知新哈,如果有更好的方法希望大家都提出来~ 一.使用Select Into语句 若企业数据库都采用的是SQL Server数据库的话,则可以利用Select Into语句来实现数据的导入.Select Into语句,他的

SQL Server数据库中批量导入数据的四种方法总结

在软件项目实施的时候,数据导入一直是项目人员比较头疼的问题.其实,在SQL Server中集成了很多成批导入数据的方法.有些项目实施顾问头疼的问题,在我们数据库管理员眼中,是小菜一碟.现在的重点就是,如何让用户了解这些方法,让数据导入变得轻松一些. 第一:使用Select Into语句 若企业数据库都采用的是SQL Server数据库的话,则可以利用Select Into语句来实现数据的导入.Select Into语句,他的作用就是把数据从另外一个数据库中查询出来,然后加入到某个用户指定的表中.

清空SQL Server数据库中所有表数据的方法

原文:清空SQL Server数据库中所有表数据的方法 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入死循环,二是这里使用了微软未正式公开的sp_MSForEachTable存储过程. 也许很多读者朋友都经历过这样的事情:要在开发数据库基础上清理一个空库,但由于对数据库结构缺乏整体了解,在删除一个表的记录时,删除不了,因为可能有外键约束,一个常见的数据库结构是一个主表,一个子表,这种情况下一般

Excel表数据导入Sql Server数据库中两种办法

方法一,程序导入 C#.ASP.NET中将Excel表中的数据导入到Sql Server数据库中对应的表中. 这里我们将E:\test.xls中Sheet1表中的数据导入到test数据库中的my_test表中. 软件:VS2005,SQL Server2000, test.xls中Sheet1表中有三个字段,编号.名称.备注.具体内容如下图. 1.首先,我们要先在test数据库中新建一个my_test表,该表具有三个字段 tid int类型, tname nvarchar类型, tt nvarc

C#同步SQL Server数据库中的数据--数据库同步工具[同步已有的有变化的数据]

C#同步SQL Server数据库中的数据--数据库同步工具[同步已有的有变化的数据] 1. C#同步SQL Server数据库Schema 2. C#同步SQL Server数据库中的数据--数据库同步工具[同步新数据] 3. 分析下自己写的SQL Server同步工具的性能和缺陷 接着写数据同步,这次可以把有变化的数据进行更新了: 1.SQL批量更新函数: /// <summary> /// Note: for columns, the first string must be prima

mfc vc6 0 sql 数据库-请问当SQL Server数据库中数据有更新的时候,如何通知到MFC上?

问题描述 请问当SQL Server数据库中数据有更新的时候,如何通知到MFC上? 编程环境VC6.0,在MFC对话框中添加了一些控件,并且能够显示数据库中内容, 使用的是CRecordSet类,读取完数据库后就调用Close关闭数据库了. 我想请问的是,如何实时的显示数据库内容? 或者当数据库数据有变更的时候才显示到 MFC的控件上? 解决方案 参考这个试试 SQL Server 2008 表数据改变后发送消息 http://blog.csdn.net/sliphades/article/de

jsp从sql server数据库中获得的dateTime类型的数据能否直接相减

问题描述 jsp从sql server数据库中获得的dateTime类型的数据能否直接相减 我想获得两个日期之间相差的天数,最好能精确到分,过路的大侠指点一下吧! 解决方案 java从数据库读到的是java.sql.Date,java.sql.Date继承于java.util.Date.java.util.Date有个方法getTime(),返回从格林威治时间1970年1月1日00:00:00到该Date对象的时间的毫秒数.你把两个Date对象的getTime()相减再除以(60×1000)就是