CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

如何让导入批量txt文件

楼主leiyingw(小雷)2004-09-03 20:16:32 在 MS-SQL Server / 基础类 提问

有一个表table1  
  file_name     varchar(50)  
  file_text     ntext(16)  
  需要将某目录c:\file\下的txt文本导入数据库  
  file_name字段对应文件名  
  file_text字段对应文档内容  
   
  请教高手 问题点数:50、回复次数:17Top

1 楼hdhai9451(☆新人类☆)回复于 2004-09-03 20:24:49 得分 0

參考  
  EXEC   master..xp_cmdshell   'bcp   "數據庫.dbo.數據表"   in   c:\DT.txt   -c   -S服務器名   -U用戶   -P密碼'  
  EXEC   master..xp_cmdshell   'bcp   hdh.dbo.kind   in   "e:\TX1.txt"   -c   -q   -S   -U   -P'  
  Top

2 楼leiyingw(小雷)回复于 2004-09-03 20:26:33 得分 0

能不能详细点呢  
   
  我有大量的文本要做这样的操作Top

3 楼hdhai9451(☆新人类☆)回复于 2004-09-03 20:41:02 得分 0

如果是從本機導入的,可以不用用戶名,密碼  
  EXEC   master..xp_cmdshell   'bcp   hdh.dbo.kind   in   "e:\TX1.txt"   -c   -q   -S   -U   -P'  
   
  從其他數據庫導入要提供用戶名,密碼  
  EXEC   master..xp_cmdshell   'bcp   "數據庫.dbo.數據表"   in   c:\DT.txt   -c   -S"sprogram"   -U"develop"   -P"12345"'Top

4 楼leiyingw(小雷)回复于 2004-09-03 20:48:52 得分 0

'bcp'   不是内部或外部命令,也不是可运行的程序  
  或批处理文件。  
   
  是什么意思Top

5 楼zjcxc(邹建)回复于 2004-09-03 22:01:25 得分 0

楼上几位的方法是不对的,楼主要要把文本文件的整内容保存到file_text字段  
   
  所以要用导入表的处理方式.Top

6 楼zjcxc(邹建)回复于 2004-09-03 22:05:25 得分 50

if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_binaryIO]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)  
  drop   procedure   [dbo].[p_binaryIO]  
  GO  
   
  /*--bcp   实现二进制文件的导入导出  
   
  支持image,text,ntext字段的导入/导出  
  image适合于二进制文件,包括:Word文档,Excel文档,图片,音乐等  
  text,ntext适合于文本数据文件  
   
  注意:导入不会新增记录,所以导入前要对表进行初始化,即插入记录  
  导入时,将覆盖满足条件的所有行  
  导出时,将把所有满足条件的行导出到指定文件中  
   
   
  此存储过程仅用bcp实现  
   
  --邹建   2003.08(引用请保留此信息)---*/  
   
  /*--调用示例  
  --数据导出  
  exec   p_binaryIO   'zj','','','acc_演示数据..tb','img','c:\zj1.dat'  
   
  --数据导入  
  exec   p_binaryIO   'zj','','','acc_演示数据..tb','img','c:\zj1.dat','',0  
  --*/  
  Create   proc   p_binaryIO  
  @servename   varchar   (30),--服务器名称  
  @username   varchar   (30),   --用户名  
  @password   varchar   (30), --密码  
  @tbname   varchar   (500),   --数据库..表名  
  @fdname   varchar   (30),   --字段名  
  @fname   varchar   (1000), --目录+文件名,处理过程中要使用/覆盖:@filename+_temp  
  @tj   varchar   (1000)='',   --处理条件.对于数据导入,如果条件中包含@fdname,请指定表名前缀  
  @isout   bit=1 --1导出((默认),0导入  
  AS    
  declare   @fname_in   varchar(1000) --bcp处理应答文件名  
  ,@fsize   varchar(20) --要处理的文件的大小  
  ,@m_tbname   varchar(50) --临时表名  
  ,@sql   varchar(8000)  
   
  --则取得导入文件的大小  
  if   @isout=1    
  set   @fsize='0'  
  else  
  begin  
  create   table   #tb(可选名   varchar(20),大小   int  
  ,创建日期   varchar(10),创建时间   varchar(20)  
  ,上次写操作日期   varchar(10),上次写操作时间   varchar(20)  
  ,上次访问日期   varchar(10),上次访问时间   varchar(20),特性   int)  
  insert   into   #tb  
  exec   master..xp_getfiledetails   @fname  
  select   @fsize=大小   from   #tb  
  drop   table   #tb  
  if   @fsize   is   null  
  begin  
  print   '文件未找到'  
  return  
  end  
   
  end  
   
  --生成数据处理应答文件  
  set   @m_tbname='[##temp'+cast(newid()   as   varchar(40))+']'  
  set   @sql='select   *   into   '+@m_tbname+'   from(  
  select   null   as   类型  
  union   all   select   0   as   前缀  
  union   all   select   '+@fsize+'   as   长度  
  union   all   select   null   as   结束  
  union   all   select   null   as   格式  
  )   a'  
  exec(@sql)  
  select   @fname_in=@fname+'_temp'  
  ,@sql='bcp   "'+@m_tbname+'"   out   "'+@fname_in  
  +'"   /S"'+@servename  
  +case   when   isnull(@username,'')=''   then   ''    
  else   '"   /U"'+@username   end  
  +'"   /P"'+isnull(@password,'')+'"   /c'  
  exec   master..xp_cmdshell   @sql  
  --删除临时表  
  set   @sql='drop   table   '+@m_tbname  
  exec(@sql)  
   
  if   @isout=1  
  begin  
  set   @sql='bcp   "select   top   1   '+@fdname+'   from   '    
  +@tbname+case   isnull(@tj,'')   when   ''   then   ''  
  else   '   where   '+@tj   end  
  +'"   queryout   "'+@fname  
  +'"   /S"'+@servename  
  +case   when   isnull(@username,'')=''   then   ''    
  else   '"   /U"'+@username   end  
  +'"   /P"'+isnull(@password,'')  
  +'"   /i"'+@fname_in+'"'  
  exec   master..xp_cmdshell   @sql  
  end  
  else  
  begin  
  --为数据导入准备临时表  
  set   @sql='select   top   0   '+@fdname+'   into   '  
  +@m_tbname+'   from   '   +@tbname  
  exec(@sql)  
   
  --将数据导入到临时表  
  set   @sql='bcp   "'+@m_tbname+'"   in   "'+@fname  
  +'"   /S"'+@servename  
  +case   when   isnull(@username,'')=''   then   ''    
  else   '"   /U"'+@username   end  
  +'"   /P"'+isnull(@password,'')  
  +'"   /i"'+@fname_in+'"'  
  exec   master..xp_cmdshell   @sql  
   
  --将数据导入到正式表中  
  set   @sql='update   '+@tbname  
  +'   set   '+@fdname+'=b.'+@fdname  
  +'   from   '+@tbname+'   a,'  
  +@m_tbname+'   b'  
  +case   isnull(@tj,'')   when   ''   then   ''  
  else   '   where   '+@tj   end  
  exec(@sql)  
   
  --删除数据处理临时表  
  set   @sql='drop   table   '+@m_tbname  
  end  
   
  --删除数据处理应答文件  
  set   @sql='del   '+@fname_in  
  exec   master..xp_cmdshell   @sql  
  goTop

7 楼zjcxc(邹建)回复于 2004-09-03 22:11:36 得分 0

--先创建上面的存储过程,然后用下面的代码导入c:\file\下的所有文本文件.  
   
  create   table   #t(fname   varchar(260),depth   int,isf   bit)  
  insert   into   #t   exec   master..xp_dirtree   'c:\file\',1,1  
  declare   tb   cursor   for   select   fn='c:\file\'+fname   from   #t  
  where   isf=1   and   fname   like   '%.txt'     --取.txt文件  
   
  declare   @fn   varchar(8000),@db   varchar(100),@where   varchar(8000)  
  set   @db='['+db_name()+'].dbo.table1'  
   
  open   tb  
  fetch   next   from   tb   into   @fn  
  while   @@fetch_status=0  
  begin  
  insert   table1([file_name])   values(@fn)  
  set   @where='[file_name]='''+@fn+''''  
  exec   p_binaryIO   '','','',@db,'file_text',@fn,@where,0  
  fetch   next   from   tb   into   @fn  
  end  
  close   tb  
  deallocate   tb  
  drop   table   #t  
  Top

8 楼leiyingw(小雷)回复于 2004-09-03 23:23:24 得分 0

邹建大哥:  
  还是出现了:'bcp'   不是内部或外部命令,也不是可运行的程序  
  或批处理文件。  
   
  Top

9 楼leiyingw(小雷)回复于 2004-09-03 23:24:41 得分 0

另外,文本内容还是没有导入Top

10 楼leiyingw(小雷)回复于 2004-09-03 23:29:01 得分 0

为什么会出现“资源不足,部分结果已除去”Top

11 楼zjcxc(邹建)回复于 2004-09-04 08:10:13 得分 0

bcp   你的sql服务器上不会bcp也不能调用吧?  
   
  你去检查一下你的sql服务器上有没有bcp.exe这个文件,并且检查一下是否可以在sql中调用Top

12 楼leiyingw(小雷)回复于 2004-09-04 17:33:28 得分 0

有这个文件阿,要怎么检查是否可以调用Top

13 楼leiyingw(小雷)回复于 2004-09-04 17:51:38 得分 0

邹建大哥:  
   
  bcp的问题搞定了  
   
  但是我发现导入数据库的文本全是乱码  
   
  怎么回事呢  
  Top

14 楼SuperFC(●捡分e族●)回复于 2004-09-04 19:04:31 得分 0

mark   一下,学习ingTop

15 楼leiyingw(小雷)回复于 2004-09-06 23:58:26 得分 0

顶一下Top

16 楼rfq(任凤泉)回复于 2004-09-07 09:45:47 得分 0

很好!保存  
   
  Top

17 楼torrent2008(微笑)回复于 2004-09-07 15:01:10 得分 0

study!  
  Top

相关问题

  • 如何实现批量把excel文件导入为dbf文件?
  • 怎样向mysql中导入.txt文件??
  • 怎么导入TXT文件内容
  • importfile()怎样导入txt文件?
  • txt文件的导入问题!
  • .txt文件导入 Oracle问题?
  • TXT文件导入SQL SERVER的问题?
  • txt文件导入access出错
  • 批量导入.sql文件建表的方法-百分求助
  • 文件导入

关键词

  • 文件
  • 字段
  • 文本
  • sql
  • 数据
  • 文档
  • 服务器
  • xp
  • 导入
  • 數據

得分解答快速导航

  • 帖主:leiyingw
  • zjcxc

相关链接

  • SQL Server类图书

广告也精彩

反馈

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