日期:2014-05-18  浏览次数:20577 次

一个问题好多天了没解决,请高手指点,在线等。
SQL code
alter proc test
as
begin tran 

Insert into [123.152.11.3].db.dbo.tb(operatedate) values(getdate())
select max(id)  from [123.152.11.3].db.dbo.tb


if(@@error <> 0)
begin
rollback 
end
else
begin
commit
end

SQL code
我在执行上面这个存储过程时,提示以下错误:
message:7391 level:16

oleDB属性"SQLOLEDB"分散事务不能开始,要求进行的操作不能进行。

OLE/DB provider returned message: 被指定的事务并行,新建的事务不能执行。




我不加事务没有问题,加上了 就出上面的问题


------解决方案--------------------
启动分布式事务
------解决方案--------------------
如果这句能成功?
Insert into [123.152.11.3].db.dbo.tb(operatedate) values(getdate())

则我认为下面的代码没有问题.
if(@@error <> 0)
begin
rollback 
end
else
begin
commit
end

看不明白了,帮顶.
------解决方案--------------------
首先[123.152.11.3] 不是和你执行的数据库所在的服务器
远程事务不可以有事务控制的啊
很奇怪,你为什么不到[123.152.11.3]直接执行呢,这样做不安全而且还有很多隐患,如ip改了怎么办,以后维护换人了可能找半天都找不到,所以改下执行的服务器吧,也不复杂
------解决方案--------------------
SQL code
alter proc test
as
begin tran 

Insert into [123.152.11.3].db.dbo.tb(operatedate) values(getdate())
select max(id)  from [123.152.11.3].db.dbo.tb

commit tran --提交事务,如果最近一条SQL有错,则回滚
if(@@error <> 0)
begin
rollback 
end