sql复制表中的image字段无法复制问题

xuyao521 2012-08-23 04:28:52
第一次在这发帖,有点紧张。刚实习没多久,遇到了一个难题,如下:

两个物理隔离的数据库,分别有一张表,结构完全相同,现在由于某种原因,需要从甲机器的数据库复制出这张表的数据,生成一个脚本,然后拿着这个脚本,到乙机器执行,把这些数据“粘贴进去”。
以为很简单的问题,可真的把我难住了,表中有一个字段是image字段,应该是压缩的二进制代码,开头都是“0x3C003F”什么什么的。
我试了网上的很多办法,写了很多存储过程,都有一些问题。现在求教各位大侠,我现在想把这个字段读取出来,存成xml,然后拿过去再解析出来,弱弱的问一下,应该怎么写。实在是没办法了,想了太久也没有思路。或者大家有更好的办法,请多多提提意见,谢谢各位!
...全文
180 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuyao521 2012-08-24
  • 打赏
  • 举报
回复
drop procedure UspOutputData

CREATE PROCEDURE dbo.UspOutputData
@tablename sysname
AS
declare @column varchar(1000)
declare @columndata varchar(1000)
declare @sql varchar(4000)
declare @xtype tinyint
declare @name sysname
declare @objectId int
declare @objectname sysname
declare @ident int

set nocount on
set @objectId=object_id(@tablename)

if @objectId is null -- 判断对象是否存在
begin
print 'The object not exists'
return
end
set @objectname=rtrim(object_name(@objectId))

if @objectname is null or charindex(@objectname,@tablename)=0 --此判断不严密
begin
print 'object not in current database'
return
end

if OBJECTPROPERTY(@objectId,'IsTable') < > 1 -- 判断对象是否是table
begin
print 'The object is not table'
return
end

select @ident=status&0x80 from syscolumns where id=@objectid and status&0x80=0x80

if @ident is not null
print 'SET IDENTITY_INSERT '+@TableName+' ON'

declare syscolumns_cursor cursor

for select c.name,c.xtype from syscolumns c where c.id=@objectid order by c.colid

open syscolumns_cursor
set @column=''
set @columndata=''
fetch next from syscolumns_cursor into @name,@xtype

while @@fetch_status < >-1
begin
if @@fetch_status < >-2
--begin
--if @xtype not in(189,34,35,99,98) --timestamp不需处理,image,text,ntext,sql_variant 暂时不处理

begin
set @column=@column+case when len(@column)=0 then'' else ','end+@name

set @columndata=@columndata+case when len(@columndata)=0 then '' else ','','','
end

+case when @xtype in(167,175,231,239) then '''''''''+'+@name+'+''''''''' --varchar,char
--when @xtype in(231,239) then '''N''''''+'+@name+'+''''''''' --nvarchar,nchar
when @xtype=61 then '''''''''+convert(char(23),'+@name+',121)+''''''''' --datetime
when @xtype=58 then '''''''''+convert(char(16),'+@name+',120)+''''''''' --smalldatetime
when @xtype=36 then '''''''''+convert(char(36),'+@name+')+''''''''' --uniqueidentifier
else @name end

end

--end

fetch next from syscolumns_cursor into @name,@xtype

end

close syscolumns_cursor
deallocate syscolumns_cursor

set @sql='set nocount on select ''insert '+@tablename+'('+@column+') values('','+@columndata+','')'' from '+@tablename

print '--'+@sql
exec(@sql)

if @ident is not null
print 'SET IDENTITY_INSERT '+@TableName+' OFF'


GO



这是我在网上找的一个存储过程,改了一点点,然后用了之后可以导出,导出的就是一条条insert语句,到另外一个数据库执行就可以了,但是没想到有问题,不知道什么原因,就是不好用,导入乙数据库之后这条数据它不认,肯定是哪里出了问题,老师也告诉我有问题,但是我没找到
调用方法为
exec UspOutputData 表名
大家也研究研究吧,也许以后会有用
xuyao521 2012-08-24
  • 打赏
  • 举报
回复
实在是感谢各位。
问题是这样的,这个image字段存的应该不只是图片,他是一个页面的排版。页面的个性化设置之后,就会在这个字段写入一条记录。
筱筱澄(姐只想当个嫂子),大侠的帖子我似乎看过,但是这似乎有点不太适合我的情况,我是物理隔离的数据库,一个程序中怎么调用两个根本连不到的数据库。
唯一的办法就是把甲机器的数据导出来,变成一个文件,然后再到乙机器导入。
我还是新手,不知道说的对不对,希望大家赐教。
筱筱澄 2012-08-23
  • 打赏
  • 举报
回复
http://blog.csdn.net/redcn2004/article/details/1670073

从帖子来看还是需要程序来操作的。
wobuainiyes 2012-08-23
  • 打赏
  • 举报
回复
不能直接把甲机器需要的数据放入单独一个数据库里,然后备份数据库,将备份文件拷到乙机器,还原,再插入吗?
除了拷贝过程,其他都可以写脚本完成的。
shoppo0505 2012-08-23
  • 打赏
  • 举报
回复
image格式就是把图片文件转成16进制(希望没记错)。
如果只是备份数据的话,可以安装SSMS插件,直接生成脚本。

不太清楚你的解析是什么意思?难道要转成图片?然后保存?

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧