CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  应用实例

高分求解:bcp导入问题

楼主lg9wowo(lg9wowo)2005-05-01 11:35:53 在 MS-SQL Server / 应用实例 提问

用bcp导出xls文件后,在xls修改某个字段后保存会有格式不兼容的提示.保存后的文件再用bcp就不能导入了。有哪位高手遇过这种问题能解决的?谢谢 问题点数:100、回复次数:5Top

1 楼hdhai9451(☆新人类☆)回复于 2005-05-01 16:34:05 得分 50

用BCP工具導入導出,請參考下面  
   
  (1)xls文件  
  EXEC   master..xp_cmdshell   'bcp   "SELECT   class_no,kind_no,cn_name   FROM   new_ks.dbo.kind   ORDER   BY   1,2"   queryout   "e:\test3.xls"   -c   -q   -S"sprogram"   -U"huang"   -P"12345"'  
   
  (2)/**   导入文本文件  
  --入SQLServer  
  select   *     into   你的表   from   OpenRowset('MSDASQL',   'Driver={Microsoft   Text   Driver   (*.txt;   *.csv)};DefaultDir=c:\temp;','select   *   from   contact.txt')  
   
  --查詢導出  
  EXEC   master..xp_cmdshell   'bcp   "SELECT   class_no,kind_no,cn_name   FROM   new_ks.dbo.kind   ORDER   BY   1,2"   queryout   "e:\TX1.txt"   -c   -q   -S"sprogram"   -U"huang"   -P"12345"'  
  --直接導出  
  EXEC   master..xp_cmdshell   'bcp   new_ks.dbo.class   out   "e:\TX3.txt"   -c   -S"sprogram"   -U"huang"   -P"12345"'  
   
  EXEC   master..xp_cmdshell   'bcp   hdh.dbo.tabx   out   "e:\TX30.txt"   -c   -S"ks052"   -U"huang"   -P"12345"'  
  Top

2 楼zjcxc(邹建)回复于 2005-05-02 16:27:50 得分 0

bcp导出的是文本文件,而不是真正的excel文件  
  你可以在bcp导出后,使用记事本打开来验证这个问题  
   
  既然不是真正的excel文件,用excel打开,修改并保存的时候当然就会有不兼容的提示  
  保存后的是真正的excel文件,当然不能再用bcp导入,bcp只接受导入文本文件.`  
  Top

3 楼zjcxc(邹建)回复于 2005-05-02 16:27:55 得分 50

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  
   
  /*--数据导出EXCEL  
   
  导出查询中的数据到Excel,包含字段名,文件为真正的Excel文件  
  如果文件不存在,将自动创建文件  
  如果表不存在,将自动创建表  
  基于通用性考虑,仅支持导出标准数据类型  
   
  --邹建   2003.10(引用请保留此信息)--*/  
   
  /*--调用示例  
   
  p_exporttb   @sqlstr='select   *   from   地区资料'  
  ,@path='c:\',@fname='aa.xls',@sheetname='地区资料'  
  --*/  
  create   proc   p_exporttb  
  @sqlstr   varchar(8000), --查询语句,如果查询语句中使用了order   by   ,请加上top   100   percent  
  @path   nvarchar(1000), --文件存放目录  
  @fname   nvarchar(250), --文件名  
  @sheetname   varchar(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='temp.xls'  
  if   isnull(@sheetname,'')=''   set   @sheetname=replace(@fname,'.','#')  
   
  --检查文件是否已经存在  
  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   8.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  
  declare   @tbname   sysname  
  set   @tbname='##tmp_'+convert(varchar(38),newid())  
  set   @sql='select   *   into   ['+@tbname+']   from('+@sqlstr+')   a'  
  exec(@sql)  
   
  select   @sql='',@fdlist=''  
  select   @fdlist=@fdlist+',['+a.name+']'  
  ,@sql=@sql+',['+a.name+']   '  
  +case    
  when   b.name   like   '%char'    
  then   case   when   a.length>255   then   'memo'  
  else   'text('+cast(a.length   as   varchar)+')'   end  
  when   b.name   like   '%int'   or   b.name='bit'   then   'int'  
  when   b.name   like   '%datetime'   then   'datetime'  
  when   b.name   like   '%money'   then   'money'  
  when   b.name   like   '%text'   then   'memo'  
  else   b.name   end  
  FROM   tempdb..syscolumns   a   left   join   tempdb..systypes   b   on   a.xtype=b.xusertype  
  where   b.name   not   in('image','uniqueidentifier','sql_variant','varbinary','binary','timestamp')  
  and   a.id=(select   id   from   tempdb..sysobjects   where   name=@tbname)  
   
  if   @@rowcount=0   return  
   
  select   @sql='create   table   ['+@sheetname  
  +']('+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   8.0;HDR=YES  
  ;DATABASE='+@path+@fname+''',['+@sheetname+'$])'  
   
  exec('insert   into   '+@sql+'('+@fdlist+')   select   '+@fdlist+'   from   ['+@tbname+']')  
   
  set   @sql='drop   table   ['+@tbname+']'  
  exec(@sql)  
  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 楼lg9wowo(lg9wowo)回复于 2005-05-05 01:40:14 得分 0

能用bcp吗?Top

5 楼duanduan1122(俺村俺帅!!!)回复于 2005-05-18 13:44:40 得分 0

不能用bcp,因为bcp只能针对文本文件。其他文件不行。Top

相关问题

  • 高分求解:bcp导入问题
  • Excel导入超难题200分求解
  • 高分求解,怎样把EXCEL导入到SQL SERVER中
  • VC6++导入Excel2003的问题-高分求解
  • 【200分求解】关于csv文件分批导入SQL该如何实现
  • 【200分求解】关于csv文件分批导入SQL该如何实现
  • 100分求解如何将用户资料导入dbf数据库库?
  • 使用脚本导入/导出数据的问题-高分求解!
  • 高分求解!
  • !!!高分求解!!!

关键词

  • 文件
  • excel
  • xp
  • bcp
  • 导入
  • fdlist
  • sprogram
  • huang
  • tbname
  • 文本文件

得分解答快速导航

  • 帖主:lg9wowo
  • hdhai9451
  • zjcxc

相关链接

  • SQL Server类图书

广告也精彩

反馈

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