将excel导入到数据库问题

八爪鱼-杭州 2004-01-16 10:37:26
select * into #t
from OPENROWSET('MICROSOFT.JET.OLEDB.4.0',
'Excel .0;HDR=YES;DATABASE=f:\test.xls',sheet1$)

说明:当前数据库不是本地数据库(如果是本地数据库语句能执行成功)

请各位牛人帮我分析一下原因,有没有办法解决
...全文
291 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
八爪鱼-杭州 2004-01-16
  • 打赏
  • 举报
回复
现在我再试试,谢谢你啊
八爪鱼-杭州 2004-01-16
  • 打赏
  • 举报
回复
不好意思,刚才把目录test打成text了
八爪鱼-杭州 2004-01-16
  • 打赏
  • 举报
回复
我把excel 拷到sql server服务器上去,然后把这句改成
exec @err=sp_oamethod @obj,'Workbooks.Open',@icount out,'e:\csdn.xls'
还是
错误号:0x800A03EC
错误源:Microsoft Excel
错误描述:
Microsoft Excel 无法找到“e:\test.xls”。请检查工作簿名称的拼写,并确认文件位置是否正确。 如果是
zjcxc 元老 2004-01-16
  • 打赏
  • 举报
回复
你的共享没有设置好.
zjcxc 元老 2004-01-16
  • 打赏
  • 举报
回复
应该不会错啊.你的当前用户是什么?用sa登陆
八爪鱼-杭州 2004-01-16
  • 打赏
  • 举报
回复
错误号:0x800A03EC
错误源:Microsoft Excel
错误描述:
Microsoft Excel 无法找到“\\mycomputer\test\test.xls”。请检查工作簿名称的拼写,并确认文件位置是否正确。 如果是


八爪鱼-杭州 2004-01-16
  • 打赏
  • 举报
回复
我把它改成这样:
select * into #t from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;DATABASE=\\mycomputer\test\test.xls',sheet1$)
还是出错了:
服务器: 消息 7399,级别 16,状态 1,行 1
OLE DB 提供程序 'MICROSOFT.JET.OLEDB.4.0' 报错。提供程序未给出有关错误的任何信息。
zjcxc 元老 2004-01-16
  • 打赏
  • 举报
回复
--用下面的语句测试一下,看你的excel中有那些工作表

--得到Excel文件中的所有工作表名

declare @err int,@src varchar(255),@desc varchar(255)
declare @obj int,@icount int,@sheetname varchar(200)

exec @err=sp_oacreate 'Excel.Application',@obj out
if @err<>0 goto lberr

exec @err=sp_oamethod @obj,'Workbooks.Open',@icount out,'c:\csdn.xls' --你的Excel文件名
if @err<>0 goto lberr

exec @err=sp_oagetproperty @obj,'ActiveWorkbook.Sheets.Count',@icount out
if @err<>0 goto lberr
select @icount
while @icount>0
begin
set @src='ActiveWorkbook.Sheets('+cast(@icount as varchar)+').Name'
exec @err=sp_oagetproperty @obj,@src,@sheetname out
if @err<>0 goto lberr
print @sheetname
set @icount=@icount-1
end

exec @err=sp_oadestroy @obj
return

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

八爪鱼-杭州 2004-01-16
  • 打赏
  • 举报
回复
我想做一个用户数据导入的程序呀,这样的话就不能一步在程序中做好了
zjcxc 元老 2004-01-16
  • 打赏
  • 举报
回复
sheet1是工作表名,$是在SQL中查询需要加的一个符号

select * into #t
from OPENROWSET('MICROSOFT.JET.OLEDB.4.0',
'Excel .0;HDR=YES;DATABASE=\\计算机名\共享目录名\test.xls',[sheet1$])
zjcxc 元老 2004-01-16
  • 打赏
  • 举报
回复
也可以借助access来做中间过程.

方法如下下:
打开access,随机打开一个数据库,没有的话就新建一个空库
然后点查询--新建--设计视图--再在菜单--视图中选择sql视图

然后输入下面的查询语句,并执行就行了.(注意根据你的情况做适当调整)

select * into
[ODBC;Driver=SQL Server;Server=SQL服务器名;Uid=用户名;Pwd=密码;database=数据库名].要生成的表名
FROM [Excel 5.0;HDR=YES;DATABASE=F:\test.xls].[sheet1$];

八爪鱼-杭州 2004-01-16
  • 打赏
  • 举报
回复
我没有改那个excel的呀,表sheet1$也有的
八爪鱼-杭州 2004-01-16
  • 打赏
  • 举报
回复
我把文件拷到sql server所在的机器上以后.出错了:
服务器: 消息 7314,级别 16,状态 1,行 1
OLE DB 提供程序 'MICROSOFT.JET.OLEDB.4.0' 不包含表 'sheet1$'。该表可能不存在,或当前用户没有使用该表的权限。
zjcxc 元老 2004-01-16
  • 打赏
  • 举报
回复
如果你的excel文件和sql不在同一台电脑.

可以共享excel文件所在的目录,然后用类似下面的语句:

select * into #t
from OPENROWSET('MICROSOFT.JET.OLEDB.4.0',
'Excel .0;HDR=YES;DATABASE=\\计算机名\共享目录名\test.xls',sheet1$)
zjcxc 元老 2004-01-16
  • 打赏
  • 举报
回复
excel文件必须在数据库服务器上,而不是你的本机.
八爪鱼-杭州 2004-01-16
  • 打赏
  • 举报
回复
f:\test.xls
是放在本地机器上的
只要放在sql server所在机器就行了吗
有没有办法不放在本地机器上就能导入啊
yistudio 2004-01-16
  • 打赏
  • 举报
回复
去文档中心找一下吧,那里有
playyuer 2004-01-16
  • 打赏
  • 举报
回复
f:\test.xls !!!

路径是相对于 SQL Server 所在机器的!
八爪鱼-杭州 2004-01-16
  • 打赏
  • 举报
回复
出错信息:

服务器: 消息 7399,级别 16,状态 1,行 1
OLE DB 提供程序 'MICROSOFT.JET.OLEDB.4.0' 报错。提供程序未给出有关错误的任何信息。

34,575

社区成员

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

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