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

支持image,text,ntext字段的导入/导出
image适合于二进制文件;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
--*/
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

Create   proc   p_binaryIO
@servename   varchar   (30),--服务器名称
@username   varchar   (30),   --用户名
@password   varchar   (30), --密码
@tbname   varchar   (500),   --数据库..表名
@fdname   varchar   (30),   --字段名
@fname   varchar   (1000), --目录+文件名,处理过程中要使用/覆盖:@filename+.bak
@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

sql 二进制文件的导入导出相关推荐

  1. 转载-SQL Server各种导入导出数据方式的比较

    注:本文转载自 http://blog.csdn.net/nokiaguy/article/details/4684822 当我们建立一个数据库时,并且想将分散在各处的不同类型的数据库分类汇总在这个新 ...

  2. SQL AZURE数据导入导出,云计算体验之四

    SQL AZURE数据导入导出 我们在之前的文章中为大家介绍了如何在SQL AZURE上创建数据库及管理数据库,从之前的介绍中我们可以看出,SQL AZURE是完全可以满足小型企业的数据库业务需求的. ...

  3. SQL Server数据库导入导出数据方式比较

    在我们建立一个数据库时,并且想将分散在各处的不同类型的数据库分类汇总在这个新建的数据库中时,尤其是在进行数据检验.净化和转换时,将会面临很大的挑战.幸好SQL Server为我们提供了强大.丰富的数据 ...

  4. Excel与Sql Server互通导入导出跨语言

    目录 Excel与Sql Server互通导入导出跨语言 1.目标Excel缺少表的列标题字段 1.1.问题的提出从这里开始 1.2.参数的正确写法 1.3.附带说一下Jet 4.0 1.4.附带说一 ...

  5. mysql数据库导入sql文件Mysql导入导出.sql文件的方法

    mysql数据库导入sql文件:Mysql导入导出.sql文件的方法 mysql导入sql文件:Mysql导入导出.sql文件 步骤如下: 一.MYSQL的命令行模式的设置: 桌面->我的电脑- ...

  6. Linux下导出MySQL为SQL文件_MySQL导入导出.sql文件步骤

    MySQL导入导出.sql文件步骤如下: 一.MySQL的命令行模式的设置: 桌面->我的电脑->属性->环境变量->新建-> PATH=":path\mysq ...

  7. sql server 2008 导入导出数据大全

    /*******  导出到excel EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q - S&quo ...

  8. C# sql数据的导入导出

    从sql导出到txt try                 {                     SqlDataAdapter sdr = new SqlDataAdapter("s ...

  9. sql server数据库导入导出bcp方法

    微软的官方文档: http://msdn.microsoft.com/zh-cn/library/ms162802.aspx 以下示例均在sql server 2005上测试过,完全ok可用的. 1. ...

  10. SQL存储过程的导入导出

    转贴网址:http://haitao.javaeye.com/blog/782365 近日在研究SQL的存储过程,这里我陆续将我在使用存储过程中碰到的问题及解决办法发布到网上,请各位大虾指正. Sql ...

最新文章

  1. 复制数据表的两种情况。
  2. 指定域的名称或安全标识(SID)与该域的信任信息不一致.
  3. Oracle 原理 : 动态性能视图和数据字典
  4. alert文件位置 oracle,Oracle11gAlertlog文件位置的问题
  5. mybatis源码刨析总结
  6. 恢复联想键盘F1-F12标准模式
  7. spring roo_使用Spring Roo进行快速云开发–第1部分:Google App Engine(GAE)
  8. Java微服务篇3——Lucene
  9. 嵌入式系统功能需求分析_机械管理系统如何物料需求分析
  10. Web 端的测试 Selenium 用法必备
  11. Java俩个小球碰撞的代码_java实现小球碰撞功能
  12. 单亲遗传算法matlab,关于单亲遗传算法的matlab代码
  13. php 魔方加密还原,PHP魔方解密 - osc_80l29rkk的个人空间 - OSCHINA - 中文开源技术交流社区...
  14. 麦块java文件夹_我的世界游戏文件夹目录作用介绍 各个文件夹都是什么用
  15. adb启动程序命令:adb shell am start
  16. 海思嵌入式开发-004-Hi3516烧录问题总结
  17. 对联盟链的零星想法,欢迎指正交流
  18. STM32F407-外部中断
  19. Python数据分析案例18——化学分子数据模型(机器学习分类问题全流程)
  20. 算法导论第三版 第15章习题答案

热门文章

  1. 估计理论(5):BLUE的定义(6.3)
  2. android studio for android learning (十一) 利用bundle在activity之间进行数据传递示例
  3. 【ACM ICPC 2011–2012, Northeastern European Regional Contest】Interactive Permutation Guessing【交互题】
  4. WebShell脚本检测机器学习一
  5. 242.有效的字母异位词(力扣leetcode) 博主可答疑该问题
  6. 大平房到朝阳环路时间表_冰蓄冷系统设计计算10大要点
  7. win7 mysql 未响应_求助啊 WIN7下安装mysql出问题 老是说未响应~!!
  8. 微信浏览器禁止页面下拉查看网址(不影响页面内部scroll)
  9. 打开struts-config.xml 报错 解决方法Could not open the editor
  10. 早该知道的7个JavaScript技巧