高分求解如何从TXT或EXCEL导入导出MSSQL

analysefirst 2006-08-27 12:09:33
如何从EXCEL导入MS-SQL数据库? 用的是VC++ 6.0、 MS-SQL2000 、EXCEL2000或EXCEL2003。

如何从TXT档导入MS-SQL数据库? 用的是VC++ 6.0、 MS-SQL2000 、EXCEL2000或EXCEL2003。

又是如何从MS-SQL导出到 EXCEL(这个书本上有)、TXT档呢?

希望给出详细代码,或文章的网址。

或发邮件给我。

我的邮箱是 sicong0089@yahoo.com.cn

QQ:87854519

谢谢了!!!
...全文
635 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
analysefirst 2006-08-27
  • 打赏
  • 举报
回复
一人50分,不知道怎么给分,不好意思。

分数不多,非常感谢二位!!!
analysefirst 2006-08-27
  • 打赏
  • 举报
回复
OK了
zjcxc 元老 2006-08-27
  • 打赏
  • 举报
回复
--从SQL数据库中,导出数据到Excel,如果Excel文件已经存在,而且已经按照要接收的数据创建好表头,就可以简单的用:
insert into OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)
select * from 表


--如果Excel文件不存在,也可以用BCP来导成类Excel的文件,注意大小写:
--导出表的情况
EXEC master..xp_cmdshell 'bcp 数据库名.dbo.表名 out "c:\test.xls" /c /S"服务器名" /U"用户名" -P"密码"'

--导出查询的情况
EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout "c:\test.xls" /c /S"服务器名" /U"用户名" -P"密码"'


/*--说明:
c:\test.xls 为导入/导出的Excel文件名.要求文件在SQL服务器上,或者SQL服务器可以访问的共享目录上
sheet1$ 为Excel文件的工作表名,一般要加上$才能正常使用.
--*/

zjcxc 元老 2006-08-27
  • 打赏
  • 举报
回复
从Excel文件中,导入数据到SQL数据库中,很简单,直接用下面的语句:

/*===================================================================*/
--如果接受数据导入的表已经存在
insert into 表 select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)

--如果导入数据并生成表
select * into 表 from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Excel 5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)

zjcxc 元老 2006-08-27
  • 打赏
  • 举报
回复
if exists(select 1 from sysobjects where name='File2Table' and objectproperty(id,'IsProcedure')=1)
drop procedure File2Table
go

/*--实现数据导入/导出的存储过程

可以实现导入/导出 指定表 到文本文件
支持自定义行/列分隔符

--邹建 2003.07(引用请保留此信息)--*/

/*--调用示例

导出调用示例
--导出指定表,这里指定导出表:地区资料
exec file2table 'zj','','','c:\zj.txt','xzkh_new..地区资料',@rowsplit=','

导入调用示例
--导入指定表,这里指定导入表:地区资料
exec file2table 'zj','','','c:\zj.txt','xzkh_sa..地区资料',0

--*/

create procedure File2Table
@servername varchar(200) --服务器名
,@username varchar(200) --用户名,如果用NT验证方式,则为空''
,@password varchar(200) --密码
,@filename varchar(1000) --目录名+文件名
,@tbname varchar(500)='' --数据库..表名
,@isout bit=1 --1为导出(默认),0为导入
,@fdsplit varchar(10)='\t' --字段分隔符,默认为制表符
,@rowsplit varchar(10)='\n' --记录分隔符,默认为回车符
as
declare @sql varchar(8000)

set @sql='bcp "'+@tbname
+case when @isout=1 then '" out' else '" in' end
+' "'+@filename+'" /c' +' /S"'+@servername
+case when isnull(@username,'')='' then ''
else '" /U"'+@username end
+'" /P"'+isnull(@password,'')+'"'
+' /t"'+@fdsplit+'"'
+' /r"'+@rowsplit+'"'

exec master..xp_cmdshell @sql
go
zjcxc 元老 2006-08-27
  • 打赏
  • 举报
回复
cmdshell + bcp 只能处理数据文件(一般是text文件)

excel文件可以用openrowset, 但无法用bcp
analysefirst 2006-08-27
  • 打赏
  • 举报
回复
http://tech.it168.com/db/s/2006-08-15/200608151159804.shtml
正在看这篇文章,我的MSN: edwardsim@163.com

QQ:87854519

谢谢了
specialsoldier 2006-08-27
  • 打赏
  • 举报
回复
有msn么? 我加你
specialsoldier 2006-08-27
  • 打赏
  • 举报
回复
语法:EXEC master..xp_cmdshell 'bcp 数据库名.表所有者名.表名 in E:\哈哈.xls -c -q -S"填服务器名称" -U"填用户名" -P"填密码"'

例子:
EXEC master..xp_cmdshell 'bcp eoms_sz.dbo.test in E:\哈哈.xls -c -q -S"" -U"" -P""'
因为我是windows帐户,有时导入本地数据库,所以后面三个参数都没填.导入的test表先要有和xls相同的字段(个数和名称).否则不行

你试一下,告诉我报什么错,哪里有问题
analysefirst 2006-08-27
  • 打赏
  • 举报
回复
你的这个方法,我在网上也查到了不少,可是我试过都不行。

包括不同数据库之间转换的,我试了都不行。

你可以说得更详细点吗???
specialsoldier 2006-08-27
  • 打赏
  • 举报
回复
今天真巧,问的问题我都刚试过...

如果你是从windows帐户直接进入本地sql server的,最后三个引号对中都不要填.我就是这样用的.
specialsoldier 2006-08-27
  • 打赏
  • 举报
回复
利用扩展存储过程xp_cmdshell导入导出数据

--导入时注意要有相同结构的表存在,所以先获得相同结构的表.
select * into test from uos_staff where 1=0
bcp 可以实现数据的导入导出。
EXEC master..xp_cmdshell 'bcp eoms_sz.dbo.test in E:\哈哈.xls -c -q -S"填服务器名称" -U"填用户名" -P"填密码"'
//导入
EXEC master..xp_cmdshell 'bcp eoms_sz.dbo.uos_staff out E:\哈哈1.xls -c -q -S"" -U"" -P""'
//导出

34,587

社区成员

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

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