程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> sql 二進制文件的導入導出

sql 二進制文件的導入導出

編輯:關於MYSQL數據庫

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

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved