CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  应用实例

关于数据导入问题!如果将Excle表中指定字段(列)的数据导入到SQL Server中指定表的指定字段中去?

楼主msn365(顺子)2004-02-01 19:39:40 在 MS-SQL Server / 应用实例 提问

关于数据导入问题!如果将Excle表中指定字段(列)的数据导入到SQL   Server中指定表的指定字段中去?  
   
  例如,现在有一个Execle表,里面有很多字段(列),其中有一个字段(列)叫做E1,同时SQL   Server中的数据库表db1.tab1中有一个字段叫做S1,现在的问题是如何将E1中的数据导入到S1中呢? 问题点数:0、回复次数:7Top

1 楼jingxijun(一笑)回复于 2004-02-01 20:25:03 得分 0

insert   into   yourtable   select   姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)    
  from    
  opendatasource('MICROSOFT.JET.OLEDB.4.0'  
  ,'Excel   5.0;HDR=YES;IMEX=2;DATABASE=c:\a.xls'  
  --,Sheet1$)  
  )...[Sheet1$]  
  Top

2 楼DigJim(挖土)回复于 2004-02-01 20:27:41 得分 0

回复人:   zjcxc(邹建)   (   )    
   
  从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'  
  ,'Excel   5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)  
   
   
  /*===================================================================*/  
  --如果从SQL数据库中,导出数据到Excel,如果Excel文件已经存在,而且已经按照要接收的数据创建好表头,就可以简单的用:  
  insert   into   OPENROWSET('MICROSOFT.JET.OLEDB.4.0'  
  ,'Excel   5.0;HDR=YES;DATABASE=c:\test.xls',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文件的工作表名,一般要加上$才能正常使用.  
   
   
   
  =========================================================================  
   
  上面已经说了,对于将数据导出Excel,要么你得事先建好Excel文件及表头,要么你只能导出类Excel文件(其实就是纯文本文件),而且没有包含字段名.  
  Top

3 楼DigJim(挖土)回复于 2004-02-01 20:29:50 得分 0

回复人:   zjcxc(邹建)   (   )   信誉:216    
   
  /*--数据导出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="'+@sql+'";DBQ='+@sql  
  else  
  set   @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended   Properties="Excel   5.0;HDR=YES'  
  +';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  
   
  --创建表的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,2,8000)  
   
  exec   @err=sp_oamethod   @obj,'execute',@out   out,@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  
  Top

4 楼msn365(顺子)回复于 2004-02-01 22:08:03 得分 0

您能不能直接解决一下我的问题呀?  
   
  我的问题是  
  现在有一个Execle表,里面有很多字段(列),其中有一个字段(列)叫做E1,同时SQL   Server中的数据库表db1.tab1中有一个字段叫做S1,现在的问题是如何将E1中的数据导入到S1中呢?  
   
  Top

5 楼DigJim(挖土)回复于 2004-02-01 23:30:24 得分 0

SQL   Server中的数据库表db1.tab1的其他字段的值呢?Top

6 楼DigJim(挖土)回复于 2004-02-01 23:46:46 得分 0

如果其他字段都是NULL,那么你可以这样  
   
  1、先在Excel中把这一列单独复制出来,保存到一个新的Excel文件中,这个Excel只有这一列!  
   
  2、  
  insert   into   tab1(S1)   select   *   from    
  OPENROWSET('MICROSOFT.JET.OLEDB.4.0'  
  ,'Excel   5.0;HDR=YES;DATABASE=c:\新的文件.xls',A$)  
  Top

7 楼DigJim(挖土)回复于 2004-02-01 23:49:37 得分 0

或者直接可以这样,不用新建文件  
   
  insert   into   tab1(S1)   select   E1   from    
  OPENROWSET('MICROSOFT.JET.OLEDB.4.0'  
  ,'Excel   5.0;HDR=YES;DATABASE=c:\老文件.xls',A$)Top

相关问题

  • 如何用SQL语句在指定字段前面插入新的字段?
  • SQL Server7.0 中的日期字段如何设置指定格式?
  • 求一个SQL语句:查一个指定字段中的数据出现指定次数的记录
  • 请教一条sql语句。显示指定表中的所有字段及其字段信息。可否做到?
  • 不指定字段,没有分隔符,如何用sql语句插入多个字段到数据表?
  • 求查询指定表的字段名和字段数据类型及约束条件的SQL语句
  • 求指定表的字段名,数据类型,约束条件的SQL语句
  • 如何用Sql语句在表中指定位置添加字段?
  • 用SQL语句在表中增加字段,可不可以增加在指定的已有字段后面,而不是增加在所有字段的后面?
  • 为什么我用update不更新指定的字段及如何动态组成sql语句

关键词

  • 字段
  • 数据
  • hdr
  • excel
  • 数据库
  • 账号
  • 文件
  • 银行
  • database
  • microsoft

得分解答快速导航

  • 帖主:msn365

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo