当前位置:文档之家› 导入与导出和数据处理

导入与导出和数据处理

导入与导出熟悉SQL SERVER 2000的数据库管理员都知道,其DTS可以进行数据的导入导出,其实,我们也可以使用Transact-SQL语句进行导入导出操作。

在Transact-SQL语句中,我们主要使用OpenDataSource函数、OPENROWSET 函数,关于函数的详细说明,请参考SQL 联机帮助。

利用下述方法,可以十分容易地实现SQLSERVER、ACCESS、EXCEL数据转换,详细说明如下:在SQL Server中主要有三种方式导入导出数据:使用Transact-SQL对数据进行处理;调用命令行工具bcp处理数据;使用数据转换服务(DTS)对数据进行处理。

这三种方法各有其特点,下面就它们的主要特点进行比较。

一. 使用数据转换服务(DTS)导入导出数据DTS是SQL Server中导入导出数据的核心,它除有具有SQL和命令行工具bcp相应的功能外,还可以灵活地通过VBScript、JScript等脚本语言对数据进行检验、净化和转换。

SQL Server为DTS提供了图形用户接口,用户可以使用图形界面导入导出数据,并对数据进行相应的处理。

同时,DTS还以com组件的形式提供编程接口,也就是说任何支持com组件的开发工具都可以利用com组件使用DTS所提供的功能。

DTS在SQL Server中可以保存为不同的形式,可以是包的形式,也可以保存成Visual Basic源程序文件,这样只要在VB中编译便可以使用DTS com组件了。

1在SQL SERVER企业管理器中的Tools(工具)菜单上,选择Data Transformation 2Services(数据转换服务),然后选择czdImport Data(导入数据)。

3在Choose a Data Source(选择数据源)对话框中选择Microsoft Access as the Source,然后键入你的.mdb数据库(.mdb文件扩展名)的文件名或通过浏览寻找该文件。

4在Choose a Destination(选择目标)对话框中,选择Microsoft OLE DB Prov ider for SQL Server,选择数据库服务器,然后单击必要的验证方式。

5在Specify Table Copy(指定表格复制)或Query(查询)对话框中,单击Copy tables (复制表格)。

6在Select Source Tables(选择源表格)对话框中,单击Select All(全部选定)。

下一步,完成。

二. 使用Transact-SQL进行数据导入导出我们很容易看出,Transact-SQL方法就是通过SQL语句方式将相同或不同类型的数据库中的数据互相导入导出或者汇集在一处的方法。

如果是在不同的SQL Server数据库之间进行数据导入导出,那将是非常容易做到的。

一般可使用SELECT INTO FROM和INSERT INTO。

使用SELECT INTO FROM时INTO后跟的表必须存在,也就是说它的功能是在导数据之前先建立一个空表,然后再将源表中的数据导入到新建的空表中,这就相当于表的复制(并不会复制表的索引等信息)。

而INSERT INTO的功能是将源数据插入到已经存在的表中,可以使用它进行数据合并,如果要更新已经存在的记录,可以使用UPDATE。

SELECT * INTO table2 FROM table1 --table1和table2的表结构相同INSERT INTO table2 SELECT * FROM table3 --table2和table3的表结构相同当在异构数据库之间的进行数据导入导出时,情况会变得复杂得多。

首先要解决的是如何打开非SQL Server数据库的问题。

在SQL Server中提供了两个函数可以根据各种类型数据库的OLE DB Provider打开并操作这些数据库,这两个函数是OPENDATASOURCE和OPENROWSET。

它们的功能基本上相同,(一)、使用openrowset 函数查看access中的数据select*from openrowset('Microsoft.Jet.OLEDB.4.0','C:\Documents and Settings\Administrator\桌面\教学管理.mdb';'admin';'',教师表)(1)/*************导出到Access********************/insert into openrowset('Microsoft.Jet.OLEDB.4.0','x:\A.mdb';'admin';'',A表) select * from 数据库名..B表insert into openrowset('Microsoft.Jet.OLEDB.4.0','C:\Documents and Settings\Administrator\桌面\教学管理.mdb';'admin';'',book)select*from xsbook.dbo.book注意:access中的表要有,字段类型与sql中表的一样/*************导入Access********************/insert into B表selet * from openrowset('Microsoft.Jet.OLEDB.4.0','x:\A.mdb';'admin';'',A表)原来有表,格式一致insert into B表select*from openrowset('Microsoft.Jet.OLEDB.4.0', 'C:\Documents and Settings\Administrator\桌面\教学管理.mdb';'admin';'',教师表)原来没有表,导入后新建select*into aa from openrowset('Microsoft.Jet.OLEDB.4.0', 'C:\Documents and Settings\Administrator\桌面\教学管理.mdb';'admin';'',教师表)文件名为参数declare @fname varchar(20)set @fname = 'd:\test.mdb'exec('SELECT a.* FROM opendatasource(''Microsoft.Jet.OLEDB.4.0'', '''+@fname+''';''admin'';'''', topics) as a ')2、导入导出到xls(1)查询excel中的数据select*fromOpenRowSet('microsoft.jet.oledb.4.0','Excel5.0;HDR=yes;database=C:\Documents and Settings\Administrator\桌面\aa.xls;',stu)select*fromOpenRowSet('microsoft.jet.oledb.4.0','Excel5.0;HDR=yes;database=C:\Documents and Settings\Administrator\桌面\论文成绩汇总模板.xls;',原底$)(2)把excel表导入sql 的基本方法从excel文件中,导入数据到sql数据库中,很简单,直接用下面的语句:--如果接受数据导入的表已经存在insert into student(s#,sname,ssex)select * fromOPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel5.0;HDR=YES;IMEX=2;DATABASE=D:\testdata\test01.xls',[sheet1$])--如果导入数据并生成表select* into aa fromOPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel5.0;HDR=YES;IMEX=2;DATABASE=D:\testdata\test01.xls',[sheet1$])select*into aa fromOPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel5.0;HDR=YES;IMEX=2;DATABASE=C:\Documents and Settings\Administrator\桌面\aa.xls;',Sheet1$)(3)把sql表导出excel 的基本方法如果从sql数据库中,导出数据到excel,如果excel文件已经存在,而且已经按照要接收的数据创建好表头,就可以简单的用:insert intoOpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;HDR=yes;database=D:\testdata\test01.xls;', [Sheet1$]) select * from 表名insert intoOpenRowSet('microsoft.jet.oledb.4.0','Excel5.0;HDR=yes;database=C:\Documents and Settings\Administrator\桌面\aa.xls;',Sheet1$)select*from book(二)使用OPENDATASOURCOPENDATASOURCE的参数有两个,分别是OLE DB Provider和连接字符串。

使用OPENDATASOURCE只相当于引用数据库或者是服务(对于SQL Server、Oracle等数据库来说)。

要想引用其中的数据表或视图,必须在OPENDATASOURCE(...)后进行引用。

相关主题