请教:SQL2008中image字段内容如何导出成文件

黑色水墨 2015-09-12 04:23:07
数据库为SQL200R2,
create table tb(id int,img image)
insert tb
SELECT 1, * FROM OPENROWSET(BULK N'E:\ABC.xls', SINGLE_BLOB) AS Document
insert tb
SELECT 2, * FROM OPENROWSET(BULK N'E:\EFG.jpg', SINGLE_BLOB) AS Document
我将两个文件存入到数据表 tb中,现在我想把表tb中字段img存放的文件取出来,只通过SQL语句即SQL端实现该功能,
通过这样的方式导出文件:
sp_configure 'show advanced options',1
reconfigure
go
sp_configure 'xp_cmdshell',1
reconfigure
go
EXEC master..xp_cmdshell 'bcp "select img from Text..tb Where id=1 " queryout "e:\test.xls" -c -x -S"(local)" -U"sa" -P"123456" '
EXEC master..xp_cmdshell 'bcp "select img from Text..tb where id=2 " queryout "e:\test.jpg" -c -x -S"(local)" -U"sa" -P"123456" '
但是这样导出的文件无效,图片打开无内容,Excel打开发现只是将image中存放的二进制值放入到A1单元格中。
请教各位,有什么方法能在SQL中将image类型字段中存放的文件再导出成文件且文件正常?

...全文
1057 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
clever101 2016-09-07
  • 打赏
  • 举报
回复
饮水需思源 2015-09-18
  • 打赏
  • 举报
回复
网上搜索一下,好像有存储过程可以实现的
ダ雨夹雪リ 2015-09-18
  • 打赏
  • 举报
回复
Declare @App int
Declare @ID int
Declare @result int
Declare @filename Varchar(100)
Declare @files VarBinary(max)

DECLARE Cur CURSOR FOR
Select id,img,image From tb

OPEN Cur
FETCH NEXT FROM Cur INTO @ID,@filename,@files

WHILE @@FETCH_STATUS = 0
BEGIN
Exec sp_OACreate 'ADODB.Stream', @App OUT
Exec sp_OASetProperty @App, 'Mode', 3
Exec sp_OASetProperty @App, 'Type', 1
EXEC sp_OAMethod @App,'Open'
Exec sp_OAMethod @App, 'Write',null,@files
Exec sp_OAMethod @App, 'SaveToFile',null,@filename,2
Exec sp_OADestroy @App
FETCH NEXT FROM Cur INTO @ID,@filename,@files
End
CLOSE Cur
DEALLOCATE Cur
tcmakebest 2015-09-17
  • 打赏
  • 举报
回复
写一个小工具应该用不了半小时吧.
tsp3ng 2015-09-17
  • 打赏
  • 举报
回复
用前端程序采用文件流的方式读取再保存
lzw_0736 2015-09-12
  • 打赏
  • 举报
回复
用前端程序语言处理

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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