加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SqlServer_excel数据导入导出

发布时间:2020-12-12 13:59:33 所属栏目:MsSql教程 来源:网络整理
导读:1、打开企业管理器,打开要导入数据的数据库,在表上按右键,所有任务--导入数据,弹出DTS导入/导出向导,按 下一步 ,? 2、选择数据源 Microsoft Excel 97-2000,文件名 选择要导入的xls文件,按 下一步 ,? 3、选择目的 用于SQL Server 的Microsoft OLE DB
1、打开企业管理器,打开要导入数据的数据库,在表上按右键,所有任务-->导入数据,弹出DTS导入/导出向导,按 下一步 ,? 2、选择数据源 Microsoft Excel 97-2000,文件名 选择要导入的xls文件,按 下一步 ,? 3、选择目的 用于SQL Server 的Microsoft OLE DB提供程序,服务器选择本地(如果是本地数据库的话,如 VVV),使用SQL Server身份验证,用户名sa,密码为空,数据库选择要导入数据的数据库(如 client),按 下一步 ,? 4、选择 用一条查询指定要传输的数据,按 下一步 ,? 5、按 查询生成器,在源表列表中,有要导入的xls文件的列,将各列加入到右边的 选中的列 列表中,这一步一定要注意,加入列的顺序一定要与数据库中字段定义的顺序相同,否则将会出错,按 下一步 ,? 6、选择要对数据进行排列的顺序,在这一步中选择的列就是在查询语句中 order by 后面所跟的列,按 下一步 ,? 7、如果要全部导入,则选择 全部行,按 下一步,? 8、则会看到根据前面的操作生成的查询语句,确认无误后,按 下一步,? 9、会看到 表/工作表/Excel命名区域 列表,在 目的 列,选择要导入数据的那个表,按 下一步,? 10、选择 立即运行,按 下一步,? 11、会看到整个操作的摘要,按 完成 即可。? 当然,在以上各个步骤中,有的步骤可以有多种选择,你可以根据自己的需要来选择相应的选项。例如,对编程有兴趣的朋友可以在第10步的时候选择保存DTS包,保存成Visual Basic文件,可以看看里面的代码,提高自己的编程水平? 从SQL Server中导入/导出 Excel 的基本方法      /*=================== 导入/导出 Excel 的基本方法 ===================*/      从Excel文件中,导入数据到SQL数据库中,很简单,直接用下面的语句:       /*===================================================================*/   --如果接受数据导入的表已经存在   insert into 表 select * from    OPENROWSET('MICROSOFT.JET.OLEDB.4.0'   ,'Excel 5.0;HDR=YES;DATABASE=c:test.xls',sheet1$)      --如果导入数据并生成表    select * into 表 from   OPENROWSET('MICROSOFT.JET.OLEDB.4.0'   ,sheet1$)       /*===================================================================*/   --如果从SQL数据库中,导出数据到Excel,如果Excel文件已经存在,而且已经按照要接收的数据创建好表头,就可以简单的用:    insert into OPENROWSET('MICROSOFT.JET.OLEDB.4.0'   ,sheet1$)   select * from 表      --如果Excel文件不存在,也可以用BCP来导成类Excel的文件,注意大小写:   --导出表的情况   EXEC master..xp_cmdshell 'bcp 数据库名.dbo.表名 out "c:test.xls" /c -/S"服务器名" /U"用户名" -P"密码"'      --导出查询的情况   EXEC master..xp_cmdshell 'bcp "SELECT au_fname,au_lname FROM pubs..authors ORDER BY au_lname" queryout "c:test.xls" /c -/S"服务器名" /U"用户名" -P"密码"'      /*--说明:   c:test.xls 为导入/导出的Excel文件名.   sheet1$   为Excel文件的工作表名,一般要加上$才能正常使用.   --*/   --上面已经说过,用BCP导出的是类Excel文件,其实质为文本文件,     --要导出真正的Excel文件.就用下面的方法      /*--数据导出EXCEL      导出表中的数据到Excel,包含字段名,文件为真正的Excel文件   ,如果文件不存在,将自动创建文件   ,如果表不存在,将自动创建表   基于通用性考虑,仅支持导出标准数据类型   --邹建 2003.10--*/      /*--调用示例      p_exporttb @tbname='地区资料',@path='c:',@fname='aa.xls'   --*/   if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_exporttb]') and OBJECTPROPERTY(id,N'IsProcedure') = 1)   drop procedure [dbo].[p_exporttb]   GO      create proc p_exporttb   @tbname sysname,  --要导出的表名   @path nvarchar(1000),  --文件存放目录   @fname nvarchar(250)='' --文件名,默认为表名    as   declare @err int,@src nvarchar(255),@desc nvarchar(255),@out int   declare @obj int,@constr nvarchar(1000),@sql varchar(8000),@fdlist varchar(8000)      --参数检测   if isnull(@fname,'')='' set @fname=@tbname+'.xls'      --检查文件是否已经存在   if right(@path,1)<>'' set @path=@path+''   create table #tb(a bit,b bit,c bit)   set @sql=@path+@fname   insert into #tb exec master..xp_fileexist @sql      --数据库创建语句   set @sql=@path+@fname   if exists(select 1 from #tb where a=1)   set @constr='DRIVER={Microsoft Excel Driver (*.xls)}; DSN='''';READONLY=FALSE'   +';CREATE_DB="  +';DATABASE='+@sql+'"'      --连接数据库   exec @err=sp_oacreate 'adodb.connection',@obj out   if @err<>0 goto lberr      exec @err=sp_oamethod @obj,'open',null,@constr   if @err<>0 goto lberr       /*--如果覆盖已经存在的表,就加上下面的语句   --创建之前先删除表/如果存在的话   select @sql='drop table ['+@tbname+']'   exec @err=sp_oamethod @obj,'execute',@out out,@sql   --*/      --创建表的SQL   select @sql='',@fdlist=''   select @fdlist=@fdlist+',['+a.name+']'   ,@sql=@sql+',['+a.name+'] '   +case when b.name in('char','nchar','varchar','nvarchar') then    'text('+cast(case when a.length>255 then 255 else a.length end as varchar)+')'   when b.name in('tynyint','int','bigint','tinyint') then 'int'   when b.name in('smalldatetime','datetime') then 'datetime'   when b.name in('money','smallmoney') then 'money'    else b.name end   FROM syscolumns a left join systypes b on a.xtype=b.xusertype   where b.name not in('image','text','uniqueidentifier','sql_variant','ntext','varbinary','binary','timestamp')   and object_id(@tbname)=id   select @sql='create table ['+@tbname   +']('+substring(@sql,2,8000)+')'   ,@fdlist=substring(@fdlist,8000)   exec @err=sp_oamethod @obj,@sql   if @err<>0 goto lberr      exec @err=sp_oadestroy @obj      --导入数据   set @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel 5.0;HDR=YES    ;DATABASE='+@path+@fname+''',['+@tbname+'$])'      exec('insert into '+@sql+'('+@fdlist+') select '+@fdlist+' from '+@tbname)      return      lberr:   exec sp_oageterrorinfo 0,@src out,@desc out   lbexit:   select cast(@err as varbinary(4)) as 错误号   ,@src as 错误源,@desc as 错误描述   select @sql,@constr,@fdlist   go   --上面是导表的,下面是导查询语句的.?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读