将sqlserver数据库中得表导出成dbf表得问题?

ywduan 2003-10-20 04:54:17
现在要求将SQLServer中得表导出成dbf,然后提交给其他单位用,应该如何在程序中实现导出呢?一种方式是先定义好dbf表结构然后用下列语句实现:
insert into OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source=\"%s\";Extended properties=dBase 5.0')...上报表 select * from Xsk
(上报表与Xsk的结构相同)
问题是有没有一种更好的方式,可以动态生成dbf,有选择性的导出某些字段?
...全文
162 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
playyuer 2003-10-20
  • 打赏
  • 举报
回复
应该先得定义好DBF表的结构!
ywduan 2003-10-20
  • 打赏
  • 举报
回复
大力可能对我的本意理解的更好一些。其他人的做法好像必须先得定义好DBF表的结构,然后通过SQL往里写数据,现在就是不想事先定义表结构,在程序里动态的选择列导出。
先谢谢大家,我再钻研钻研大家的代码
太笨,不能理解所有的代码 :(
pengdali 2003-10-20
  • 打赏
  • 举报
回复
这个可以导出列名:

CREATE proc out2xls
@服务器名 varchar(255),
@库名 varchar(255),
@表名 varchar(255),
@用户名 varchar(100),
@密码 varchar(100),
@路径及文件名 varchar(255)
as
declare @temp1 nvarchar(4000),@temp2 varchar(8000)

set @temp1='select @value1='''',@value2='''' select @value1=@value1+'',''''''+a.name+''''+char(39)+'' [''+a.name+'']'',@value2=@value2+'',cast(''+''[''+a.name+'']''+ '' as varchar(200))'' from '+@库名+'..syscolumns a,'+@库名+'..sysobjects d where a.id=d.id and d.name='''+@表名+''''+' order by a.colorder'


exec sp_executesql @temp1,N'@value1 nvarchar(4000) output , @value2 varchar(8000) output',@temp1 output,@temp2 output

select @temp1=right(@temp1,len(@temp1)-1),@temp2=right(@temp2,len(@temp2)-1)

exec('select * into '+@库名+'.dbo.中间表 from (select '+ @temp1+' union all SELECT '+@temp2+' FROM '+@库名+'..'+@表名+') tem3')


set @temp2='bcp '+@库名+'.dbo.中间表 out '+@路径及文件名+' -c -S'+@服务器名+' -U'+@用户名+' -P'+@密码

EXEC master..xp_cmdshell @temp2
exec('drop table '+@库名+'.dbo.中间表')
GO
exec out2xls 'daliserver','pubs','jobs','sa','element','c:\a.txt'
go
drop proc out2xls
pengdali 2003-10-20
  • 打赏
  • 举报
回复
不行,这些代码只可以导出数据不能导出结构。

提交给其他单位用的话你可以动态导到excel,再让他们导入。
qdubit 2003-10-20
  • 打赏
  • 举报
回复
同意二楼的做法!
伍子V5 2003-10-20
  • 打赏
  • 举报
回复
你是转成dbase还是foxpro的数据格式,根据你的数据格式选择下面的方法:

--/* dBase IV文件
select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'dBase IV;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客户资料4.dbf]')
--*/

--/* dBase III文件
select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'dBase III;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客户资料3.dbf]')
--*/

--/* FoxPro 数据库
select * from openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\',
'select * from [aa.DBF]')
--*/
txlicenhe 2003-10-20
  • 打赏
  • 举报
回复
insert into OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source=\"%s\";Extended properties=dBase 5.0')...上报表(字段1,字面2,...) select 字段1,字面2,... from Xsk

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧