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

66次阅读
没有评论

共计 4218 个字符,预计需要花费 11 分钟才能阅读完成。

本篇文章给大家分享的是有关如何复制 Image 字段数据到新表同样的字段内,丸趣 TV 小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着丸趣 TV 小编一起来看看吧。

最近在写一个升级程序,其中要求将一个旧数据库里面的所有的照片都转到新数据库。暂且把旧数据库叫 OldDB, 新数据库叫 NewDB, 新数据库里面的字段为【Photo】, 旧数据库叫【Picture】。下面丸趣 TV 丸趣 TV 小编来讲解下如何复制 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 >

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 >

pre ccid_code

if exists (select * from dbo.sysobjects

where id = object_id(N [dbo].[sp_imageio] )

and OBJECTPROPERTY(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 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

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 字段数据到新表同样的字段内,丸趣 TV 小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-28发表,共计4218字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)