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

如何可以通过存储过程。。。。

楼主onlyzhangqin(qq)2004-08-03 20:59:55 在 MS-SQL Server / 应用实例 提问

如何可以通过存储过程  
  1、将image字段的内容生成成文件。  
  2、将文件存入image字段。 问题点数:50、回复次数:1Top

1 楼zjcxc(邹建)回复于 2004-08-03 21:02:34 得分 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

相关问题

  • 在VB中如何通过ADO调用SQLSERVER的存储过程,并获得存储过程的返回值??
  • 如何通过存储过程跨服务器调用存储过程?(给出我所有的分了)
  • 如何通过调用存储过程返回结果集?(ORACLE)
  • BCB如何通过存储过程返回纪录集!
  • 请问如何通过存储过程来创建表?
  • 如何通过存储过程取出变化的 行数
  • 如何通过VB修改 sql 的存储过程
  • 存储过程如何用??
  • 如何写存储过程
  • 如何在存储过程中调用存储过程?

关键词

  • 存储过程
  • 字段
  • 文件
  • 数据
  • 导出
  • 导入
  • binaryio
  • zj
  • varchar
  • dbo

得分解答快速导航

  • 帖主:onlyzhangqin
  • zjcxc

相关链接

  • SQL Server类图书

广告也精彩

反馈

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