博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库中存储与读取文件
阅读量:4190 次
发布时间:2019-05-26

本文共 2590 字,大约阅读时间需要 8 分钟。

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

drop procedure [dbo].[p_binaryIO]
GO

/*--bcp 实现二进制文件的导入导出

 支持image,text,ntext字段的导入/导出

 image适合于二进制文件,包括:Word文档,Excel文档,图片,音乐等
 text,ntext适合于文本数据文件

 注意:导入不会新增记录,所以导入前要对表进行初始化,即插入记录

  导入时,将覆盖满足条件的所有行
  导出时,将把所有满足条件的行导出到指定文件中
  

 此存储过程仅用bcp实现

--邹建 2003.08(引用请保留此信息)---*/

/*--调用示例

--数据导出
 exec p_binaryIO 'zj','','','acc_演示数据..tb','img','c:/zj1.dat'

--数据导入

 exec p_binaryIO 'zj','','','acc_演示数据..tb','img','c:/zj1.dat','',0
--*/
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 from(
 select null as 类型
 union all select 0 as 前缀
 union all select as 长度
 union all select null as 结束
 union all select null as 格式
 ) a'
exec(@sql)
select @fname_in=@fname+'_temp'
 ,@sql='bcp "" out "
 +'" /S"
 +case when isnull(@username,'')='' then ''
  else '" /U" end
 +'" /P"'+isnull(@password,'')+'" /c'
exec master..xp_cmdshell @sql
--删除临时表
set @sql='drop table
exec(@sql)

if @isout=1

begin
 set @sql='bcp "select top 1 from '
   isnull(@tj,'') when '' then ''
   else ' where end
  +'" queryout "
  +'" /S"
  +case when isnull(@username,'')='' then ''
   else '" /U" end
  +'" /P"'+isnull(@password,'')
  +'" /i"
 exec master..xp_cmdshell @sql
end
else
begin
 --为数据导入准备临时表
 set @sql='select top 0 into '
   from '
 exec(@sql)

 --将数据导入到临时表

 set @sql='bcp "" in "
  +'" /S"
  +case when isnull(@username,'')='' then ''
   else '" /U" end
  +'" /P"'+isnull(@password,'')
  +'" /i"
 exec master..xp_cmdshell @sql
 
 --将数据导入到正式表中
 set @sql='update
  +' set
  +' from a,'
   b'
  +case isnull(@tj,'') when '' then ''
   else ' where end
 exec(@sql)

 --删除数据处理临时表

 set @sql='drop table
end

--删除数据处理应答文件

set @sql='del
exec master..xp_cmdshell @sql
go

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=20077

你可能感兴趣的文章
网易香港上市招股书有哪些亮点 这里有最全干货解读
查看>>
第一款搭载红外测温功能的手机来了,6月3日见!
查看>>
这款iPhone 12将率先量产,诚意十足!分批上市或成定局
查看>>
一年赚4.5亿,网红盲盒公司泡泡玛特再战IPO
查看>>
化繁为简 回归初心 细品雅致设计的vivo X50系列
查看>>
拼多多回应“二次上市”:公司现金储备充裕 暂无任何计划
查看>>
前华为、魅族CMO加盟小米,雷军这样评价
查看>>
阅文推“单本可选新合同”:授权分级、免费或付费自选
查看>>
“一键删除中国App”应用海外走红,下载量破500万!谷歌:我先把你删除了
查看>>
罗永浩与银联合作直播,但因过程太流畅被网友调侃是录播
查看>>
Uzi宣布退役:身体条件不允许再继续战斗了!
查看>>
携程“线上摆摊”:1晚赚3105万
查看>>
Redmi 9或搭载联发科Helio G80:内置5000mAh电池 支持NFC
查看>>
AMD中国:没有对拼多多及其平台上任何店铺授权
查看>>
又一家互联网咖啡品牌要凉:papi酱、李诞曾代言,融资4亿打水漂
查看>>
iPhone 12将首次加入屏下指纹?都是为它铺路?
查看>>
全员摆摊开启!奉上摆摊“避坑”宝典
查看>>
期待已久!iPhone 13将使用带LTPO技术的OLED屏幕
查看>>
瑞幸咖啡股价再大涨超36% 目前总市值约13.87亿美元
查看>>
又开火了!马斯克炮轰贝佐斯:建议分拆亚马逊!
查看>>