declare @p as nvarchar(400)
declare @m as nvarchar(400)
set @p='d:\'
set @m='mndepart.xls'
select @p+@m
--消息 7399,级别 16,状态 1,第 6 行
--链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 报错。提供程序未给出有关错误的任何信息。
--消息 7303,级别 16,状态 1,第 6 行
--无法初始化链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 的数据源对象。
select * from OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=@p+@m;
Extended Properties=Excel 5.0')...[Sheet1$];
--可以显示
select * from opendatasource('microsoft.jet.oledb.4.0',
'data source=d:\mndepart.xls;
extended properties=excel 5.0')...[sheet1$];文件路径不能存到变量里面吗。。sql, opendatasource

解决方案 »

  1.   

    有几个问题:
    1。你的数据库是32位还是64位,因为64位的数据库已经没有Microsoft.Jet.OLEDB.4.0 Provider了。
    2。你的Excel版本是多少?为甚么Extended Properties=Excel 5.0'?如果是64位的SQL SERVER导入Excel参考如何获得64位 Jet Driver 
      

  2.   

    我的是32位系统,excel是2003的。
    可以导入excel,我是问我把路径保存在变量中就不可以了。。是不能这样存,还是我那里搞错了
      

  3.   

    'Data Source=@p+@m;
    Extended Properties=Excel 5.0'改成
    'Data Source=' +@p+@m+ ';
    Extended Properties=Excel 5.0'变量与字符串是需要用"+"来连接的
      

  4.   

    这样就不会报错了:declare @p as nvarchar(400)
    declare @m as nvarchar(400)
    declare @sql as nvarchar(max)
    set @p='d:\'
    set @m='mndepart.xls'set @sql='select * from OPENDATASOURCE(''Microsoft.Jet.OLEDB.4.0'',''Data Source='+@p+@m+';Extended Properties=Excel 5.0'')...[Sheet1$];'
    exec(@sql)