• sql 二进制文件的导入导出


    /*--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

  • 相关阅读:
    自定义布局模板
    单据状态图
    初识MongoDB(八)
    初识MongoDB(七)
    初识MongoDB(六)
    初识MongoDB(五)
    初识MongoDB(四)
    初识MongoDB(三)
    初识MongoDB(二)
    初识MongoDB(一)
  • 原文地址:https://www.cnblogs.com/fanyf/p/2091984.html
Copyright © 2020-2023  润新知