分享更有价值
被信任是一种快乐

如何复制Image字段数据到新表同样的字段内

文章页正文上

本篇文章给大家分享的是有关如何复制Image字段数据到新表同样的字段内,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。  最近在写一个升级程序,其中要求将一个旧数据库里面的所有的照片都转到新数据库。暂且把旧数据库叫OldDB,新数据库叫NewDB,新数据库里面的字段为【Photo】,旧数据库叫【Picture】 。下面云技术小编来讲解下如何复制Image字段数据到新表同样的字段内?  如何复制Image字段数据到新表同样的字段内  先读出旧数据库里的数据,然后用insert into插入:  insert into[ table1] values(“&rs(“Picture”)&”)  后来发现不行,我以为数据类型搞错了,改了下代码,如下:  insert into[ table1] values(‘”&rs(“Picture”)&”’)  多加了一对单引号,系统还是提示错误。以下为存储过程:  CENTER>ccid_nobr>  table width=”400″ border=”1″ cellspacing=”0″ cellpadding=”2″ bordercolorlight = “black” bordercolordark = “#FFFFFF” align=”center”>  tr>  td bgcolor=”e6e6e6″ class=”code” >  pre>ccid_code>  if exists (select * from dbo.sysobjects  where id = object_id(N'[dbo].[sp_textcopy]’)  and OBJECTPROPERTY(id, N’IsProcedure’) = 1)  drop procedure [dbo].[sp_textcopy]  GO  SET QUOTED_IDENTIFIER OFF  GO  SET ANSI_NULLS OFF  GO  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  GO  SET QUOTED_IDENTIFIER OFF  GO  SET ANSI_NULLS ON  GO  /ccid_code>/pre>  /td>  /tr>  /table>  /ccid_nobr>/CENTER>  这是调用textcopy将图片数据导入和导出的语句,我原打算新旧数据库调用同一个存储过程,旧数据库先将数据导出到硬盘,新数据库在导入。在测试以后,发现不成功,页面显示不出数据,单独用textcopy测试还是可以导出数据的,但在程序中调用,没有成功。我接下来换成下面的存储过程:  CENTER>ccid_nobr>  table width=”400″ border=”1″ cellspacing=”0″ cellpadding=”2″ bordercolorlight = “black” bordercolordark = “#FFFFFF” align=”center”>  tr>  td bgcolor=”e6e6e6″ class=”code” >  pre>ccid_code>  if exists (select * from dbo.sysobjects  where id = object_id(N'[dbo].[sp_imageio]’)  and OBJE免费主机域名CTPROPERTY(id, N’IsProcedure’) = 1)  drop procedure [dbo].[sp_imageio]  GO  SET QUOTED_IDENTIFIER OFF  GO  SET ANSI_NULLS OFF  GO  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 nu免费主机域名ll 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  SET QUOTED_IDENTIFIER OFF  GO  SET ANSI_NULLS ON  GO  /ccid_code>/pre>  /td>  /tr>  /table>  /ccid_nobr>/CENTER>  如何复制Image字段数据到新表同样的字段内  这个存储过程,基本原理其实和上面的是一样的。我先测试导出,在程序中运行后,不断刷新保存导出图片的文件夹,发现系统确实产生了数据,以文件+tmp的命名方式存放,但不知道为什么,系统运行完毕,所有的图片还是没有。这条路看来不通。  帖子发出来以后,很快有人回复。但是回复的答案就是我找到的两个存储过程的。看来问题可能无法解决。  但是任务还是的完成,最后万般无奈之下,我给认识的一位大侠发了求救信,他只是提供了一条思路,用流的方式写入。我按照这个思路,抱着试试看的心情,将代码改成如下的样式:  set rs2=Server.CreateObject(“Adodb.Recordset”)  sql2=”select top 1 * from [User] order by UserID desc”  rs2.open sql2,cn,1,3  rs2(“Photo”).AppendChunk rs(“Picture1”)  rs2.update  rs2.close  set rs2=nothing以上就是如何复制Image字段数据到新表同样的字段内,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注云技术行业资讯频道。

相关推荐: MySQL大表中重复字段的查询方法

本篇内容主要讲解“MySQL大表中重复字段的查询方法”,感免费主机域名兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“M免费主机域名ySQL大表中重复字段的查询方法”吧!  但是这样并不能得到说有重复字段的id值。(只得到…

文章页内容下
赞(0) 打赏
版权声明:本站采用知识共享、学习交流,不允许用于商业用途;文章由发布者自行承担一切责任,与本站无关。
文章页正文下
文章页评论上

云服务器、web空间可免费试用

宝塔面板主机、支持php,mysql等,SSL部署;安全高速企业专供99.999%稳定,另有高防主机、不限制内容等类型,具体可咨询QQ:360163164,Tel同微信:18905205712

主机选购导航云服务器试用

登录

找回密码

注册