日期:2014-05-17  浏览次数:20542 次

OLE DB 访问接口 "Microsoft.ACE.OLEDB.12.0" 不支持所需的事务接口
我将代码一段一段的执行 效果不错,拼成一个存储过程出事了,然后我又做成了动态的存储过程还是有问题,问题是 服务器 'CHENG-PC' 上的 MSDTC 不可用。 然后我到服务里把Distributed?Transaction?Coordinator 打开了,并且 开启 net start msdtc  ,然后问题就变成了无法执行请求的操作,因为链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.ACE.OLEDB.12.0" 不支持所需的事务接口。

源代码如下
create proc proc_downexcel  @classno char(7) , @courseno char(8)
as
begin transaction
declare @sql char(max)
insert into temp1(Sno ,Sname,Cno ,Cname,mark,classno)
select 学号,姓名,课程号,课程名,成绩,班级号
from  view_S_C_T sct 
where sct.课程号=@courseno and sct.班级号=@classno 
 
insert into OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=e:\20131218.xlsx','select sno,sname,cno,cname,mark FROM [sheet1$]') 
select sno,sname,cno,cname,mark 
from temp1
where temp1.cno=@courseno and temp1.classno= @classno

delete from temp1
where temp1.cno=@courseno and temp1.classno=@classno
commit transaction





用动态SQL如下
set @sql='openrowset(''Microsoft.ACE.OLEDB.12.0'',''Excel 12.0;DATABASE='+@path+''' ,'' select sno,sname,cno,cname,mark FROM [sheet1$]'')'
exec('insert into '+@sql+'  select sno,sname,cno,cname,mark from temp1 where temp1.cno='+@courseno+'  and  temp1.classno='+@classno+' ')


求帮解决 急死了

------解决方案--------------------
动态语句,执行会报错吗?
------解决方案--------------------
SSMS-->Server Objects-->Linked Servers-->Providers-->Microsoft.ACE.OLEDB.12.0
-->右键-->属性-->勾选所有选项后试试.


------解决方案--------------------
问题是出在“begin transaction”,以下这句是不支持使用事务的:

insert into OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=e:\20131218.xlsx','select sno,sname,cno,cname,mark FROM [sheet1$]') 
select sno,sname,cno,cname,mark 
from temp1
where temp1.cno=@courseno and temp1.classno= @classno

不知道各位大神们有没有解决方法?

------解决方案--------------------

--存储过程改为以下肯定可以执行(也就是不使用事务):
create proc proc_downexcel  @classno char(7) , @courseno char(8)
as
begin
declare @sql char(max)
insert into temp1(Sno ,Sname,Cno ,Cname,mark,classno)
select 学号,姓名,课程号,课程名,成绩,班级号
from  view_S_C_T