ID:paoluo
12129次访问,排名9191好友88人,关注者108
paoluo的文章
原创 3 篇
翻译 0 篇
转载 24 篇
评论 3 篇
最近评论
refyl:您申请sql server 版主的请求已经通过审核.

www.errmsg.cn 中国错误信息网
致力于发现和解决编程以及软件应用过程中的错误信息
junshanhudazhaxi:学习
waterxx:3篇原创: 0篇翻译: 24篇转载: 2926次点击: 24个评论:
// 木看到评论啊
// 踩踩
文章分类
    收藏
      相册
      C#
      JS
      SQL
      存档
      软件项目交易
      订阅我的博客
      XML聚合  FeedSky
      订阅到鲜果
      订阅到Google
      订阅到抓虾
      订阅到BlogLines
      订阅到Yahoo
      订阅到GouGou
      订阅到飞鸽
      订阅到Rojo
      订阅到newsgator
      订阅到netvibes

      转载 导入/导出dBase 收藏

      新一篇: 转义符 说明  | 旧一篇: javascript常用的一些判断输入验证

      从dBase文件中,导入数据到SQL数据库中,很简单,直接用下面的语句:

      /*===================================================================*/
      --如果接受数据导入的表已经存在
      insert into 表 select * from
      openrowset('MICROSOFT.JET.OLEDB.4.0'
      ,'dBase 5.0;DATABASE=c:\','select * from [test.dbf]')

      --如果导入数据并生成表
      select * into 表 from
      openrowset('MICROSOFT.JET.OLEDB.4.0'
      ,'dBase 5.0;DATABASE=c:\','select * from [test.dbf]')


      /*===================================================================*/
      --如果从SQL数据库中,导出数据到dBase,如果dBase文件已经存在,就可以简单的用:
      insert into
      openrowset('MICROSOFT.JET.OLEDB.4.0'
      ,'dBase 5.0;DATABASE=c:\','select * from [test.dbf]')
      select * from 表


      /*--说明:
      DATABASE=c:\               c:\是dbf文件的存放目录
      'select * from [test.dbf]  test.dbf是指dbf文件名
      --*/

       

      --如果dBase文件不存在,就需要用到下面的存储过程了.

       

      /*--数据导出dBase
       
       导出表中的数据到dBase,如果文件不存在,将自动创建文件
       基于通用性考虑,仅支持导出标准数据类型
      --邹建 2003.07(引用请保留此信息)--*/

      /*--调用示例

       --导出dBase
       p_exporttb @tbname='地区资料',@path='c:\',@over=0
      --*/
      if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_exporttb]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
      drop procedure [dbo].[p_exporttb]
      GO

      create proc p_exporttb
      @tbname sysname,    --要导出的表名
      @path nvarchar(1000),   --文件存放目录
      @fname nvarchar(250)='',  --文件名,默认为表名
      @over bit=0      --是否覆盖已经存在的文件,如果不覆盖,则直接追加
      as
      declare @err int,@src nvarchar(255),@desc nvarchar(255),@out int
      declare @obj int,@constr nvarchar(1000),@sql varchar(8000),@fdlist varchar(8000)

      --参数检测
      if isnull(@fname,'')='' set @fname=@tbname+'.dbf'

      --检查文件是否已经存在
      if right(@path,1)<>'\' set @path=@path+'\'
      create table #tb(a bit,b bit,c bit)
      set @sql=@path+@fname
      insert into #tb exec master..xp_fileexist @sql
      if exists(select 1 from #tb where a=1)
       if @over=1
       begin
        set @sql='del '+@sql
        exec master..xp_cmdshell @sql,no_output
       end
       else
        set @over=0
      else
       set @over=1

      --数据库创建语句
      set @sql=@path+@fname
      set @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties="dBASE 5.0;'
       +';HDR=NO;DATABASE='+@path+'"'

      --连接数据库
      exec @err=sp_oacreate 'adodb.connection',@obj out
      if @err<>0 goto lberr

      exec @err=sp_oamethod @obj,'open',null,@constr
      if @err<>0 goto lberr

      --创建表的SQL
      select @sql='',@fdlist=''
      select @fdlist=@fdlist+','+a.name
       ,@sql=@sql+',['+a.name+'] '
        +case when b.name in('char','nchar','varchar','nvarchar') then
           'text('+cast(case when a.length>250 then 250 else a.length end as varchar)+')'
         when b.name in('tynyint','int','bigint','tinyint') then 'int'
         when b.name in('smalldatetime','datetime') then 'datetime'
         when b.name in('money','smallmoney') then 'money'
         else b.name end
      FROM syscolumns a left join systypes b on a.xtype=b.xusertype
      where b.name not in('image','text','uniqueidentifier','sql_variant','ntext','varbinary','binary','timestamp')
       and object_id(@tbname)=id
      select @sql='create table ['+@fname
       +']('+substring(@sql,2,8000)+')'
       ,@fdlist=substring(@fdlist,2,8000)

      if @over=1
      begin
       exec @err=sp_oamethod @obj,'execute',@out out,@sql
       if @err<>0 goto lberr
      end

      exec @err=sp_oadestroy @obj

      set @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''dBase 5.0;DATABASE='
       +@path+''',''select * from ['+@fname+']'')'

      --导入数据
      exec('insert into '+@sql+'('+@fdlist+') select '+@fdlist+' from '+@tbname)

      return

      lberr:
       exec sp_oageterrorinfo 0,@src out,@desc out
      lbexit:
       select cast(@err as varbinary(4)) as 错误号
        ,@src as 错误源,@desc as 错误描述
       select @sql,@constr,@fdlist

      go

       

       


      /*--数据导出dBase
       
       导出查询语句中的数据到dBase,如果文件不存在,将自动创建文件
       基于通用性考虑,仅支持导出标准数据类型
      --邹建 2003.07(引用请保留此信息)--*/

      /*--调用示例

       --导出dBase
       p_exporttb @sqlstr='select * from 地区资料',@path='c:\',@over=1
      --*/

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

      create proc p_exporttb
      @sqlstr varchar(8000),   --要导出的查询名
      @path nvarchar(1000),   --文件存放目录
      @fname nvarchar(250)='temp.dbf',--文件名,默认为temp
      @over bit=0      --是否覆盖已经存在的文件,如果不覆盖,则直接追加
      as
      declare @err int,@src nvarchar(255),@desc nvarchar(255),@out int
      declare @obj int,@constr nvarchar(1000),@sql varchar(8000),@fdlist varchar(8000)

      --参数检测
      if isnull(@fname,'')='' set @fname='temp.dbf'

      --检查文件是否已经存在
      if right(@path,1)<>'\' set @path=@path+'\'
      create table #tb(a bit,b bit,c bit)
      set @sql=@path+@fname
      insert into #tb exec master..xp_fileexist @sql
      if exists(select 1 from #tb where a=1)
       if @over=1
       begin
        set @sql='del '+@sql
        exec master..xp_cmdshell @sql,no_output
       end
       else
        set @over=0
      else
       set @over=1

      --数据库创建语句
      set @sql=@path+@fname
      set @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties="dBASE 5.0;'
       +';HDR=NO;DATABASE='+@path+'"'

      --创建表的SQL
      declare @tbname sysname
      set @tbname='##tmp_'+convert(varchar(38),newid())
      set @sql='select * into ['+@tbname+'] from('+@sqlstr+') a'
      exec(@sql)

      --连接数据库
      exec @err=sp_oacreate 'adodb.connection',@obj out
      if @err<>0 goto lberr

      exec @err=sp_oamethod @obj,'open',null,@constr
      if @err<>0 goto lberr

      --创建表的SQL
      select @sql='',@fdlist=''
      select @fdlist=@fdlist+','+a.name
       ,@sql=@sql+',['+a.name+'] '
        +case when b.name in('char','nchar','varchar','nvarchar') then
           'text('+cast(case when a.length>250 then 250 else a.length end as varchar)+')'
         when b.name in('tynyint','int','bigint','tinyint') then 'int'
         when b.name in('smalldatetime','datetime') then 'datetime'
         when b.name in('money','smallmoney') then 'money'
         else b.name end
      FROM tempdb..syscolumns a left join tempdb..systypes b on a.xtype=b.xusertype
      where b.name not in('image','text','uniqueidentifier','sql_variant','ntext','varbinary','binary','timestamp')
       and a.id=(select id from tempdb..sysobjects where name=@tbname)
      select @sql='create table ['+@fname
       +']('+substring(@sql,2,8000)+')'
       ,@fdlist=substring(@fdlist,2,8000)

      if @over=1
      begin
       exec @err=sp_oamethod @obj,'execute',@out out,@sql
       if @err<>0 goto lberr
      end

      exec @err=sp_oadestroy @obj

      set @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''dBase 5.0;DATABASE='
       +@path+''',''select * from ['+@fname+']'')'

      --导入数据
      exec('insert into '+@sql+'('+@fdlist+') select '+@fdlist+' from ['+@tbname+']')

      set @sql='drop table ['+@tbname+']'
      exec(@sql)

      return

      lberr:
       exec sp_oageterrorinfo 0,@src out,@desc out
      lbexit:
       select cast(@err as varbinary(4)) as 错误号
        ,@src as 错误源,@desc as 错误描述
       select @sql,@constr,@fdlist
      go

       

       

      发表于 @ 2006年04月14日 10:43:00|评论(loading...)|编辑

      新一篇: 转义符 说明  | 旧一篇: javascript常用的一些判断输入验证

      评论:没有评论。

      发表评论  


      当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
      Csdn Blog version 3.1a
      Copyright © paoluo