CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

MS-SQLSERVER2000中如何使用存储过程操作image类型数据?

楼主1110111()2006-03-20 22:45:29 在 MS-SQL Server / 基础类 提问

请各位大侠给个例子吧,不才谢过了~~~~ 问题点数:100、回复次数:3Top

1 楼scmail81(琳·风の狼(修罗))回复于 2006-03-20 23:32:57 得分 40

用image类型  
   
  方法:  
  1、建立过程  
  CREATE   PROCEDURE   sp_textcopy   (    
  @srvname   varchar   (30),    
  @login   varchar   (30),    
  @password   varchar   (30),    
  @dbname   varchar   (30),    
  @tbname   varchar   (30),    
  @colname   varchar   (30),    
  @filename   varchar   (30),    
  @whereclause   varchar   (40),    
  @direction   char(1))    
  AS    
  DECLARE   @exec_str   varchar   (255)    
  SELECT   @exec_str   =    
  'textcopy   /S   '   +   @srvname   +    
  '   /U   '   +   @login   +    
  '   /P   '   +   @password   +    
  '   /D   '   +   @dbname   +    
  '   /T   '   +   @tbname   +    
  '   /C   '   +   @colname   +    
  '   /W   "'   +   @whereclause   +    
  '"   /F   '   +   @filename   +    
  '   /'   +   @direction    
  EXEC   master..xp_cmdshell   @exec_str    
   
  2、建表和初始化数据  
  create   table   表名   (编号   int,image列名   image)  
  go  
  insert   表名   values(1,0x)   --   必须的,且不是null  
  insert   表名   values(2,0x)   --   必须的,且不是null  
  go  
   
  3、读入  
  sp_textcopy   '你的服务器名','sa','你的密码','库名','表名','image列名','c:\图片.bmp','where   编号=1','I'   --注意条件是   编号=1  
   
  sp_textcopy   '你的服务器名','sa','你的密码','库名','表名','image列名','c:\bb.doc','where   编号=2','I'   --注意条件是   编号=2  
   
  go  
   
  4、读出成文件  
  sp_textcopy   '你的服务器名','sa','你的密码','库名','表名','image列名','c:\图片.bmp','where   编号=1','O'   --注意条件是   编号=1  
   
  sp_textcopy   '你的服务器名','sa','你的密码','库名','表名','image列名','c:\bb.doc','where   编号=2','O'   --注意条件是   编号=2  
  go  
   
  如果报textcopy不是可执行文件的话,你就到  
  C:\Program   Files\Microsoft   SQL   Server\MSSQL\Binn  
  目录下拷备   textcopy.exe到:  
  C:\Program   Files\Microsoft   SQL   Server\80\Tools\Binn  
   
  Top

2 楼scmail81(琳·风の狼(修罗))回复于 2006-03-20 23:33:51 得分 40

或者:  
   
  bcp处理二进制文件参考  
   
   
   
  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  
  go  
  Top

3 楼zlp321002(Life Is Good,Let's Shine)回复于 2006-03-21 08:39:48 得分 20

支持image字段处理的仅有:  
  下面的函数和语句可以与   ntext、text   或   image   数据一起使用。  
  函数                     语句    
  DATALENGTH         READTEXT    
  PATINDEX             SET   TEXTSIZE    
  SUBSTRING           UPDATETEXT    
  TEXTPTR               WRITETEXT    
  TEXTVALID    
   
  --详细看帮助.  
   
   
  --简单的办法可以把它强制转换成普通字符串后.操作普通字符串.Top

相关问题

  • 请教ms sqlserver存储过程如何写多个if语句?
  • 请教一个ms sqlserver的存储过程
  • 求一SQLSERVER存储过程
  • SQLServer存储过程问题
  • Oracle的存储过程与MS SQL Server的存储过程
  • 如何执行sqlserver的存储过程?
  • command调用sqlserver存储过程问题
  • ms sql server 存储过程一问
  • Delphi如何读MS SERVER存储过程
  • 如何使用asp创建sqlserver的存储过程和执行存储过程

关键词

  • textcopy
  • 表
  • varchar
  • image
  • exec
  • 编号
  • sp
  • str

得分解答快速导航

  • 帖主:1110111
  • scmail81
  • scmail81
  • zlp321002

相关链接

  • SQL Server类图书

广告也精彩

反馈

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