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+' ')
求帮解决 急死了
[解决办法]
问题是出在“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 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
end