热门搜索 :
考研考公
您的当前位置:首页正文

从sql数据库中导出图片

来源:伴沃教育


if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_export]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)

drop procedure [dbo].[p_export]

GO

/*--导出表中的image列为文件

导出当前库,指定表中,指定的image/text/ntext列的数据为文件

导出生成的文件以表中的主键做为文件名

可以在指定导出目录时,指定文件的前缀

导出处理采用了windows身份验证,如果你的sql不支持windows身份验证

则需要把bcp处理语句中的 /T,替换为 /U\"sa\" /P\"sa的密码\"

--*/

/*--调用示例

--导出图像

exec p_export 'pub_info','pub_id','logo'

--导出文本文件,文件名以pp开头

exec p_export 'pub_info','pub_id','pr_info','c:\\pp_','.txt'

--*/

create proc p_export

@tbname sysname, --要进行导出处理的表名

@keyfd sysname, --要进行导出处理的主键名

@imgfd sysname, --要导出的图像字段名

@path nvarchar(1000)='c:\\', --导出的图像文件要保存的目录

@file sysname='', --导出的图像文件扩展名,默认为.gif

--如果是.开头,表明是直接指定的扩展名

--否则表示从表中的该字段获取扩展名

@whereand nvarchar(1000)='' --导出数据的条件

as

declare @fmtfile nvarchar(1000),@s nvarchar(4000)

if isnull(@path,'')='' set @path='c:\\'

if isnull(@file,'')='' set @file='.gif'

select top 1 @fmtfile=rtrim(reverse(filename))

from master.dbo.sysfiles where name=N'master'

select @fmtfile=stuff(@fmtfile,1,charindex('\\',@fmtfile),N'')

,@fmtfile=reverse(stuff(@fmtfile,1,charindex('\\',@fmtfile),N''))

+N'\\BACKUP\\'+cast(newid() as nvarchar(36))+N'.fmt'

set @s=N'bcp \"select null union all select 0 union all select 0 union all select null union all select null\"'

+N' queryout \"'+@fmtfile+N'\" /T /c'

exec master..xp_cmdshell @s,no_output

set @s=N'

declare tb cursor local

for

select N''bcp \"select ''+quotename(@imgfd)

+'' from ''+quotename(db_name())

+''..''+quotename(@tbname)

+'' where ''+quotename(@keyfd)

+''=''+rtrim(pub_id)

+''\" queryout \"''+@path+rtrim(pub_id)+'

+case when left(@file,1)='.' then quotename(@file,'''')

else N'ltrim('+quotename(@file)+N')' end+N'

+''\" /T /i\"''+@fmtfile+''\"''

from '+quotename(@tbname)

+case when isnull(@whereand,'')='' then ''

else N' where '+@whereand end

+N'

open tb

fetch tb into @s

while @@fetch_status=0

begin

exec master..xp_cmdshell @s--,no_output

fetch tb into @s

end

close tb

deallocate tb'

exec sp_executesql @s,N'

@tbname sysname,

@keyfd sysname,

@imgfd sysname,

@path nvarchar(1000),

@file nvarchar(10),

@fmtfile nvarchar(1000),

@s nvarchar(4000)',

@tbname,@keyfd,@imgfd,@path,@file,@fmtfile,@s

set @s='del \"'+@fmtfile+N'\"'

exec master..xp_cmdshell @s,no_output

go

因篇幅问题不能全部显示,请点此查看更多更全内容

Top