`
dengbaoleng
  • 浏览: 1134115 次
文章分类
社区版块
存档分类
最新评论

导入/导出dBase

 
阅读更多

从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

分享到:
评论

相关推荐

    数据库与DBF,access,等文件导入导出

    数据库与DBF,access,等文件 的互换,导入导出,希望各位能够喜欢

    SQL Server 导入导出大全

    导出导入 excel 导出导入 文本文件 导出导入 dBase IV文件 导出导入 dBase III文件 导出导入 DBF文件 导出导入 xml文件 等......

    SQL语句导入导出大全

    SQL语句导入导出大全 1.导出到excel 2.导入Excel 3.导入文本文件 4.导出文本文件 5.dBase IV文件 6.FoxPro 数据库 7.导出到DBF 8.导出到Access 等.......

    Delphi导入EXECL导出SQL数据工具

    SMImport 组件包能够导入如下文件格式的数据 1. MS Excel spreadsheet (directly without OLE/DDE) 2. text delimited file 3. text fixed width file 4. XML file 5. HTML file 6. MS Access database 7. MS Word ...

    xls转mdb代码以及.exe执行软件

    ,@filename varchar(1000) --导入/导出路径/文件名,如果@tbname参数指明是导出整个数据库,则这个参数是文件存放路径,文件名自动用表名.txt ,@isout bit --1为导出,0为导入 as declare @sql varchar(8000) if @...

    Full Convert数据库转换器

    它支持所有流行数据库引擎之间的非常快速的数据转换(导入和导出)操作,包括:Microsoft Access,Microsoft Excel,dBase,FoxPro,InterBase,Firebird,Lotus 1-2-3,MariaDB,MySQL,NexusDB,Oracle,Paradox,...

    DBManager Free_Standard Edition 3.2.4

    导入导出数据(MSAccess, MSExcel, Paradox, FoxPro, Dbase/Clipper, ODBC, text, html 以及 xml files);查询编辑器;数据库调试器和数据库计划管理器;数据库对象关系查看器;数据库比较工具;过程生成器。

    java中读取shp文件数据存入数据库

    shape文件由ESRI开发,一个ESRI(Environmental Systems Research Institute)的shape文件包括一个主文件,一个索引文件,和一个dBASE表。其中主文件的后缀就是 .shp。 该方法通过java代码实现将shp文件的数据读取...

    数据库系统安全、技术操作规程.doc

    数据可以手工输入或者从许多其它源文件,如DBASE或电子数据表格文件中导入,但 是根据外部数据结构可能要求一些自定义转换。一旦信息输入到DBID并导入到主数据库 中,在点对点基础上通过点建立器进行修改。大批量...

    Jetpack ActiveX控件集合

    &lt;img src=DownloadFilespack_activeximagesjetpack_1.gif&gt; Export (JET+ OLEDB)控件: Export Jet 能导出数据到以下数据库类型(要求安装 ISAM或 ODBC 驱动):Jet Engine 数据库、dBase (III, IV 和 V 数据库)、...

    FeiYu Notes

    灵活支持各种数据资料,开放式接口,可以从 DBase、FoxPro、Access、Text 数据库以及 FeiYu Notes 2.X 的数据库导入数据。可以任意自定义字段名称,自定义数据的类型。支持普通文本、数字/号码型数据、日期类型数据...

    ArcCatalog中文使用手册

    导入与导出元数据 130 书写文档 132 编辑元数据 134 使用FGDC元数据编辑器 135 使用ISO元数据编辑器 137 添加附件 138 发布到ArcIMS元数据服务的要求 140 发布元数据的准备工作 144 发布到一个ArcIMS元数据服务 149 ...

    ArcCatalog 使用手册

    导入与导出元数据 130 书写文档 132 编辑元数据 134 使用FGDC 元数据编辑器 135 使用ISO 元数据编辑器 137 添加附件 138 发布到ArcIMS 元数据服务的要求 140 发布元数据的准备工作 144 发布到一个ArcIMS 元数据服务 ...

    网管教程 从入门到精通软件篇.txt

    DUN:Microsoft拔号网络导出文件 DV:数字视频文件(MIME) DWG:AutoCAD工程图文件;AutoCAD或Generic CADD老版本的绘图格式 DXR:Macromedia Director受保护(不可编辑)电影文件 E EDA:Ensoniq ASR磁盘映像...

    C++Builder精彩编程实例集锦的源代码前3部分.rar

    实例217 如何导出对象库中的商业决策分析程序 实例218 如何打印含有图像字段的数据库表 实例219 如何实现数据库表整表复制 实例220 如何实现数据库记录的批量删除 实例221 如何实现数据库记录的批量修改 实例...

    C++Builder精彩编程实例集锦的源代码后3部分.rar

    实例217 如何导出对象库中的商业决策分析程序 实例218 如何打印含有图像字段的数据库表 实例219 如何实现数据库表整表复制 实例220 如何实现数据库记录的批量删除 实例221 如何实现数据库记录的批量修改 实例...

    第一部分 界面设计

    实例217 如何导出对象库中的商业决策分析程序 实例218 如何打印含有图像字段的数据库表 实例219 如何实现数据库表整表复制 实例220 如何实现数据库记录的批量删除 实例221 如何实现数据库记录的批量修改 实例...

Global site tag (gtag.js) - Google Analytics