sql server导出为dbf 存储过程:

sql server导出为dbf 存储过程:

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+'"'
/*

set @constr='Provider=MSDASQL.1;Persist Security Info=False;Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;UID=;PWD=;DBQ='+@path+';'

set @constr='Driver={Microsoft FoxPro VFP Driver (*.dbf)};UID=;PWD=;SourceDB='+@path+';SourceType=DBF;Exclusive=No;'
*/
--创建表的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

注意:p_exporttb 存储过程必须在查询分析器中执行新建

如在企业管理器中新建存储过程

ANSI_NULLS 和 ANSI_WARNINGS

设置的保留问题,存储过程创建后,创建时的ANSI_NULLS 和 ANSI_WARNINGS 选项就会一直保留.

而在在查询分析器中建,是因为查询分析器的默认ANSI_NULLS 和 ANSI_WARNINGS 设置是on

完整的执行代码: p_exporttb 'select top 10 * From car','c:/','1.dbf',1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DBF文件是一种常见的数据库文件格式,它经常用于存储表格数据。将DBF文件导入SQL Server数据库可以通过以下步骤完成: 1. 在SQL Server Management Studio中创建一个新的数据库,或选择要导入DBF数据的现有数据库。 2. 在SQL Server Management Studio中打开“任务”菜单,并选择“导入数据”。 3. 在“导入和导出向导”对话框中,选择要导入数据的源。在这里选择“Microsoft Access(Microsoft Jet Database Engine)”。 4. 点击“浏览”按钮,选择要导入的DBF文件。 5. 在“源”页中,提供DBF文件的正确连接字符串信息。可以使用默认的提供程序选项。 6. 在“目标”页中,选择将数据导入的目标数据库和表。 7. 在“源和目标关系”页中,可以选择设置字段映射和数据转换规则,以确保导入的数据符合目标数据库的要求。 8. 在“完成”页中,查看导入操作的摘要,并根据需要选择保存导入操作的设置。 9. 单击“完成”按钮,开始将DBF数据导入SQL Server数据库。 在导入过程中,可以根据需要进行进一步的设置和修改。导入完成后,可以在SQL Server数据库中使用所导入的数据进行查询和分析。 需要注意的是,导入DBF文件SQL Server数据库时,应确保DBF文件的结构与目标数据库的表结构相匹配,以确保数据的正确性和完整性。另外,也可以使用其他工具或编程语言来完成DBF文件SQL Server的导入过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值